All*_*ech 1 c# wpf asynchronous async-await
我知道论坛里有很多类似的问题,但我没有找到和我一样的问题.请看下面的代码.
public class MainViewModel
{
public MainViewModel()
{
Test();
}
async Task<string> Test()
{
var v = await TaskCaller();
return v;
}
Task<string> TestTask()
{
new Task<string>(() =>
{
Thread.Sleep(2000);
return "TestTask";
});
return null;
}
Task<string> TaskCaller()
{
var task = new Task<string>(() =>
{
return TestTask().Result;
});
return task;
}
}
Run Code Online (Sandbox Code Playgroud)
永远不会达到return v语句.我需要TaskCaller的结果来做更多的过程.
你没有开始任何任务,所以他们无法完成任务(他们将永远被困住Status = TaskStatus.Created).由于这些任务无法完成,您await将无限期地等待.使用Task.Run,返回热(已启动)任务,以便在线程池上安排工作,即:
Task<string> TestTask()
{
return Task.Run(() =>
{
Thread.Sleep(2000);
return "TestTask";
});
}
Run Code Online (Sandbox Code Playgroud)
或者更好的选择:
async Task<string> TestTask()
{
await Task.Delay(2000).ConfigureAwait(false);
return "TestTask";
}
Run Code Online (Sandbox Code Playgroud)
请注意,您TaskCaller实际返回null Task.这显然是一个错误.
另外:不要通过Task.Wait()或阻止任务Task.Result
| 归档时间: |
|
| 查看次数: |
1374 次 |
| 最近记录: |