假设我有这样的代码:
serviceCallFinished = false;
Task.Factory.StartNew(() => {
response = ServiceManager.GeneralService.ServiceMethod(loginName, password);
}).ContinueWith(parentTask => { serviceCallFinished = true; });
while (!serviceCallFinished)
Thread.Sleep(100);
if (response.UserValid) { }
在这种情况下,ServiceMethod
将抛出一个 Exception
但这从未显示,相反我将在 response.UserValid
上获得一个空引用>?
为什么没有将异常交给我的 UI 线程?
注意:这是在 UI 线程上,我的想法是在服务调用期间不要阻塞线程。
最佳答案
您不需要使用这样的标志来等待异步任务完成。使用 Wait()
Task t = Task.Factory.StartNew(() => {
response = ServiceManager.GeneralService.ServiceMethod(loginName, password);
});
try
{
t.Wait();
}
catch (AggregateException e)
{
...
}
Wait() 调用将提升整体 AggregateException 中的任何异常。
关于c# - 使用任务处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8445652/