【发布时间】:2018-12-17 21:58:17
【问题描述】:
我在班级顶部定义了一个任务,如下所示:
Task<string> MainTask {get;set;}
然后我在应用程序内部构建这个任务。
MainTask = new Task<string>( () =>
{
return Task.Run<string>( async () =>
{
await GetResult();
}).Result;
});
我想循环,直到任务返回数据,但是一旦任务第一次完成,我就无法再次启动它。
bool gotResult = false;
While(gotResult == false)
{
MainTask.Start();
MainTask.Wait();
if(MainTask.Result)
{
gotResult = true;
}
}
【问题讨论】:
-
这段代码很奇怪。你能解释一下为什么你不只是在循环中做一个
await GetResult();吗?你为什么要做这种将 lambda 包装在一个任务中的业务,而该任务本身又包装在一个任务中的 lambda 中?这似乎是很多不必要且危险的错误间接。 -
你为什么使用你的
Task作为你的类的一个字段而不是等待和异步你的async方法? -
hm...你不应该等待 GetResultAsync() 吗??
标签: c# multithreading task