【发布时间】:2015-11-30 04:07:12
【问题描述】:
以下代码有问题:
static void Main (string[] args)
{
Task newTask = Task.Factory.StartNew(MainTask);
newTask.ContinueWith ((Task someTask) =>
{
Console.WriteLine ("Main State=" + someTask.Status.ToString () + " IsFaulted=" + someTask.IsFaulted+" isComplete="+someTask.IsCompleted);
});
while (true)
{
}
}
static async Task MainTask()
{
Console.WriteLine ("MainStarted!");
Task someTask = Task.Factory.StartNew (() =>
{
Console.WriteLine ("SleepStarted!");
Thread.Sleep(1000);
Console.WriteLine ("SleepEnded!");
});
await someTask;
Console.WriteLine ("Waiting Ended!!");
throw new Exception ("CustomException!");
Console.WriteLine ("NeverReaches here!!");
}
我只想从新开始的任务MainTask 中获取异常。但结果并不是我所期望的。
MainStarted!
Main State = RanToCompletion IsFaulted = False isComplete = True
SleepStarted!
SleepEnded!
Waiting Ended!!
如您所见,任务在“Waiting Ended!!”之前完成控制台日志。
我不知道为什么 MainTask 结束了,即使在 MainTask 里面有 await 命令?
我错过了什么吗?
【问题讨论】:
-
有什么理由不能直接
MainTask().ContinueWith(...)?
标签: c# async-await task-parallel-library task