【发布时间】:2011-12-09 12:43:45
【问题描述】:
假设我有这样的代码:
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 线程上,我的想法是在服务调用期间不要阻塞线程。
【问题讨论】:
-
它不会回答您的问题,但请删除该循环以等待完成。使用其他东西(manualResetEvent)
-
这里的主线程是一个UI线程,不能被阻塞,这就是我使用Tread.Sleep的原因。我也不想将方法拆分为能够将线程发送到特定方法。
-
如果循环的目的是非阻塞的,那你肯定错了:UI 线程在睡眠时被阻塞了。
-
好的,所以解决这个问题的唯一方法是拆分方法,然后在 ContinueWith 中将线程传递给方法的第二部分(method2)?这将是很多方法,并且代码是否复杂。
-
Joe 回复是用于正确等待和异常管理的回复
标签: c# .net parallel-processing task