我需要编写一个服务,其中包含一些复杂的行为,比如simultanious任务,我正面临一个问题。
我在xUnit中编写了一个示例来向您展示问题。
1想要在后台执行任务,最终启动一些子任务。 在某个时刻,任务需要被取消。
因此,我有以下内容:
[Fact]
public void ShouldWaitUnitTaskCompleted()
{
Task.Factory.StartNew(() =>
{
while (!cancellationTokenSource.IsCancellationRequested)
{
Task.Delay(10000).Wait();
TaskIsCompleted = true;
}
}, cancellationTokenSource.Token);
Thread.Sleep(3000);
cancellationTokenSource.Cancel();
Assert.True(TaskIsCompleted);
}
}
然而,xUnit在3秒后完成(我的线程休眠)。 在我的任务中,我有一个循环说,只要它不是取消请求延迟,如果持续10秒。
所以我期望的行为是:
为什么我的代码不等待10秒帧通过?
答案 0 :(得分:4)
您不是await
您创建的Task
。因此,代码的执行只会继续到Thread.Sleep(3000)
。
答案 1 :(得分:2)
Cancel
表示已请求取消。
等待所有任务完成,然后才允许取消代码继续执行有用的操作 - 如果 想等待这些任务响应,已经有机制让你分开做到这一点。所以Cancel
只做一份工作,做得很好。