我在班級(jí)頂部定義了一個(gè)任務(wù),如下所示:Task<string> MainTask {get;set;}然后在應(yīng)用程序內(nèi)部構(gòu)建此任務(wù)。MainTask = new Task<string>( () => { return Task.Run<string>( async () => { await GetResult(); }).Result;});我想循環(huán),直到任務(wù)返回?cái)?shù)據(jù),但是一旦任務(wù)第一次完成,我就無(wú)法再次啟動(dòng)它。bool gotResult = false;While(gotResult == false){ MainTask.Start(); MainTask.Wait(); if(MainTask.Result) { gotResult = true; }}
1 回答

回首憶惘然
TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超11個(gè)贊
MainTask不應(yīng)該是 a Task,而應(yīng)該是 a Func<Task>(或者,在這種情況下,由于異步操作似乎提供了一個(gè)布爾值 a Func<Task<bool>>,因此您可以隨時(shí)通過(guò)簡(jiǎn)單地調(diào)用方法來(lái)啟動(dòng)異步操作。
所以定義為:
Func<Task<bool>> AsyncOperation {get;set;}
將其用作:
while(!await AsyncOperation())
{
//do nothing
}
至于分配它,您只需分配您擁有的異步方法:
AsyncOperation = GetResult;
請(qǐng)注意,您真的不應(yīng)該Task每次都使用構(gòu)造函數(shù)。不要處理未開始的任務(wù),它只會(huì)引起混亂。也不需要用來(lái)Task.Run調(diào)用異步方法。它已經(jīng)是異步的。也不需要使用 async lambda 來(lái)調(diào)用異步方法,這兩件事都只是增加了開銷而沒有增加任何價(jià)值。
- 1 回答
- 0 關(guān)注
- 126 瀏覽
添加回答
舉報(bào)
0/150
提交
取消