我有我歸結爲這樣的代碼片段一個問題:任務<t> .Wait永遠不會返回
var task=new Task<int>(()=>5);
task.Wait();
問題是task.Wait()
永遠不會返回。我過去編寫的代碼工作得很好。
我試過到目前爲止:
- 包裹了整個事情的異步函數和調用
Wait
上(相同的行爲) - 這最初是裹在
WaitAll
承諾的列表,上調用Wait
停滯 - 打過電話
Task.Start
,但收到的聲明Task.Start
沒有與承諾的風格任務工作異常
那麼,有什麼想法?
編輯:
完整的代碼片段,導致該問題:
static void EfTest()
{
_start = DateTime.Now;
var task = CreateEfTask();
var efTasks= Enumerable.Range(0, 1).Select(i => CreateEfTask()).ToList();
var t= Task.WhenAll(efTasks);
t.Wait();
var results = t.Result;
}
private static Task<Result> CreateEfTask()
{
return new Task<List<PricingRule>>(
() => new global::Entities
.Entities()
.PricingRules
.Where(pr => pr.IsEnabled).ToList())
.ContinueWith(t => new Result
{
PricingRules = t.Result,
TimeSpan = DateTime.Now.Subtract(_start)
});
}
把Task.Start
t.Wait
之前拋出一個錯誤說你不能使用中承諾窗框任務開始。
如果我做task.Start();它運行,但它在我等待時已經完成。所以,然後我的預期運行 - 我沒有得到錯誤 – BugFinder
「試圖調用Task.Start,但收到一個異常,聲明Task.Start不適用於承諾風格任務」我們可以看到具體的異常嗎? – spender