我試圖讓我的頭在C#中的新異步功能,到目前爲止我注意到的最奇怪的事情是,異步功能的每個示例都有一個函數,等待另一個異步函數定義在框架中,但沒有一個具有自定義代碼。等待自定義函數
例如,我想是在文本文件中的每一行創建一個對象,而是以異步方式,使UI線程不會凍結:
async Task Read()
{
string[] subjectStrings = File.ReadAllLines(filePath);
for (int i = 0; i < subjectStrings.Length; i++)
{
Task<Subject> function = new Task<Subject>(code => new Subject((string)code), subjectStrings[i]);
try
{
Subject subject = await function;
subjects.Add(subject);
}
catch (Exception ex)
{
debugWriter.Write("Error in subject " + subjectStrings[i]);
continue;
}
}
}
正如你所看到的,我定義根據文本文件中的一行創建新對象Subject
,然後等待此任務。如果我這樣做,調試器會跳到await
一行,然後停止。就我所知,沒有更多的代碼運行。
如果我使用舊的異步功能,我只是使用Task.ContinueWith()並添加一個回調lambda,將主題添加到列表中,並在我的路上。
所以我的問題是:
- 爲什麼這個代碼不工作?你應該如何做一個自定義的異步方法,不使用任何異步方法本身?
- 你應該怎麼樣使用異步方法?你不能使用
await
,除非你在異步函數中,並且你不應該在沒有等待的情況下調用異步方法,那麼你如何首先從同步方法調用該方法?
[你在說什麼關於此例將實施(http://stackoverflow.com/questions/5095183/how-will-i-run-an-async-taskt-method-synchronously)以及爲什麼你不應該那樣做...... –
請不要在標題中加入languge標籤,沒有它就沒有意義。標籤用於此目的。 –
但這隻與C#有關? – Miguel