2
我有一個長時間運行的任務方法,使用睡眠異步CTP V3,MS測試和Thread.sleep代碼
public Task LongRunning() {
return Task.Factory.StartNew(
() => {
Trace.TraceInformation("Start Sleep");
Thread.Sleep(10000);
Trace.TraceInformation("End Sleep");
});
}
這是我的測試調用,它工作正常
[TestMethod]
public void SimpleContinueWith() {
Trace.TraceInformation("Start");
LongRunning()
.ContinueWith(
t => Trace.TraceInformation("End")
).Wait();
}
> QTAgent32.exe Information: 0 : Start
> QTAgent32.exe Information: 0 : Start Sleep
> QTAgent32.exe Information: 0 : End Sleep
> QTAgent32.exe Information: 0 : End
但使用異步/等待測試直接通過
[TestMethod]
public async void SimpleAwait() {
Trace.TraceInformation("Start");
await LongRunning();
Trace.TraceInformation("End");
}
> QTAgent32.exe Information: 0 : Start
> QTAgent32.exe Information: 0 : Start Sleep
爲什麼呢?
超,謝謝,安裝NuGet包http://nuget.org/List/Packages/Nito.AsyncEx –
順便說一句,我在寫測試的原因是因爲我有一個調用Parallel.ForEach和遞歸的Async方法 - 它不能與async/await一起工作,就像上面的測試行爲一樣,即被調用並永不回來。 AsyncContext解決了這個問題 - 再次感謝 –