【发布时间】:2013-05-10 02:51:59
【问题描述】:
我正在尝试前往网关,获取数据然后返回 UI 线程。 ContinueWith 运行,但网关从不运行??
ILogonResult result;
Task.Factory
.StartNew(() =>
{
result = Gateway.Authenticate(a, b);
})
.ContinueWith(task =>
{
TaskScheduler.FromCurrentSynchronizationContext();
DoSomeUI(result);
}
);
【问题讨论】:
-
这里的上下文放错地方了,应该是
ContinueWith中的参数... -
我在这里看到了很多问题,但没有足够的信息来回答您的问题。 1)您不应该在任务中设置
result变量,您应该返回结果;然后继续可以从task.Result读取值。 2)你的fromUIContext放错地方了;您希望它作为ContinueWith的第二个参数,以使继续在 UI 线程中运行。DoSomeUI也应该作为参数给出任务的结果。另外,Result的类型是什么?在不知道Authenticate会发生什么的情况下很难说。 -
另外,我要用我的通灵调试技术说
result是Task<T>,你开始一个任务就开始一个任务;它在您完成启动任务时完成,而不是在它启动的任务实际完成时完成,这就是继续似乎立即运行的原因。 -
@BahaiResearch.com 这不是特别有用。
ILogonResult是什么?是代表认证的异步完成,还是包含认证的实际结果? -
您的
TaskScheduler.FromCurrentSynchronizationContext()在这段代码中没有任何用处。
标签: c# multithreading task-parallel-library