c# - 使用任务处理异常

标签 c# .net parallel-processing task

假设我有这样的代码:

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/

相关文章:

c# - 枚举定义中的波浪号 (~) 是什么?

c# - 从 ASP.NET 中的 Seek Position 流式传输 MP4 视频

.net - 是什么生成了这个数据库访问器代码?

c++ - Intel TBB 禁用嵌套并行

c# - 如何获取 ASP.NET 应用程序路径?

c# - 使用最小起订量模拟 IEnumerable<T>

haskell - monad-par 示例中 parfib 的空间分析

c - 从随机分布的粒子到规则网格的最佳并行通信

c# - 使用 memorystream 创建文件并保存到它

.net - 如何让 MSBuild 在构建服务器上增加 ClickOnce 发布修订版本号?