Task
.NET中异步编程的Task对象。
在.NET4中,Task任务结束,如果内部产生了异常 ,当GC回收Task时,会抛出AggregateException的异常。
发现这个错误在Win10系统不会产生,而在Win7系统中则会抛出异常,Win7 .NET的版本是4.0
产生这个不同原因是4.5以及后续的版本为了更好的优化异步编程。更改了Task异常默认处理行为。
Task在4.5之后Task内部异常不会抛出,而是作为Task的Result返回。
所以在.NET4.0使用需要注意手工处理异常
方法一:
Task.Factory.StartNew(()=>{
try{
//异步执行逻辑
}catch(Exception ex){
//对异常进行处理
}
});
方法二:
var taskResult = Task.Factory.StartNew(()=>{
//异步执行逻辑
});
try{
task.Wait();
}catch(Exception ex){
//对异常进行处理
}
方法三:
重写任务计划的UnobservedTaskException事件,将引发的异常设置为“已观察到”
TaskScheduler.UnobservedTaskException+=(sender, unobservedTaskExceptionEventArgs)=>{
//设置为已观测到异常,阻止默认的一行处理行为
unobservedTaskExceptionEventArgs.SetObserved();
};
WCF
WCF中双工通信的疑问,在双工通信的模型中,如果频繁调用的情况下,会导致客户端阻塞。
换成同步调用则没发现这个问题
WCF服务实现都是同样的每次设置Callback,多线程模式
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, ConcurrencyMode = ConcurrencyMode.Multiple)]
网友评论