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