2016-11-07 14 views
0

我試圖存儲任務在字典中,以便以後執行,但沒有成功:如何將任務存儲在C#中的字典以後執行

Dictionary<string, Task<object>> router = new Dictionary<string, Task<object>(); 
router["xyz"] = functionToLaterExec 

async Task<string> functionToLaterExec() 
{ 
    return await Task.FromResult("Success!"); 
} 

如果我宣佈了功能

string functionToExec() 

然後,我可以這樣做:

router["xyz"] = new Task<string>(functionToExec); 

但我需要的功能進行異步。不知道如何調用它。我試過了:

var t = router["xyz"]; 
var data = Encoding.UTF8.GetBytes(await t); 

沒有成功。

謝謝。

+2

您確實不應該存儲'Task'或'Task '對象以後運行,您應該存儲'Func '或'Func >'objects。另外,除非你正在編寫任務調度程序,否則從來沒有理由執行新的任務(...)。你應該只使用「熱門任務」。 –

+0

非常感謝@Scot tChamberlain。那樣做了。既然你是第一個迴應,如果你想讓我接受你的答案,請發表一個。如果你不這樣做,我會接受Servy的。 – mattinsalto

+0

去接受Servy的 –

回答

4

如果你希望能夠啓動一個異步操作後,那麼你不想存儲Task,你要存儲Func<Task>(或者,在你的情況下,Func<Task<string>>,這樣,當你想要啓動該操作,可以調用該函數,生成代表其完成的Task

+0

那麼,最終的代碼是怎樣的呢? – aledpardo

+1

@aledpardo如果你想存儲一些可以稍後開始任務的東西,你可以存儲'Func ',然後當你想啓動它時執行這個函數,給你一個'Task'。 – Servy

+0

非常感謝。 – aledpardo