摘要:非同步方法與平行處理
首先,將上方的程式法一分為二,修改為下方的程式碼。
var result = await myTask;
其次,在前述的二行程式碼之間插入其他的非同步方法之後,即隱含平行處理的觀念,如下方的程式碼所示。
ProcessURLAsync("http://msdn.microsoft.com", client);
Task<int> download2 =
ProcessURLAsync("http://msdn.microsoft.com/en-us/library/hh156528(VS.110).aspx", client);
Task<int> download3 =
ProcessURLAsync("http://msdn.microsoft.com/en-us/library/67w7t67f.aspx", client);
// Await each task.
int length1 = await download1;
int length2 = await download2;
int length3 = await download3;
最後,注意下列項目:
第一、新的Task並不會建立新的執行緒。
第二、各個Task並不一定按照建立的先後順序依序產生執行結果。(如果需要依照建立Task的順序產生執行結果,請參考Parallel Class或者PLinq)。
第三、人機互動的部分由一個特定的執行緒負責,非同步方法的部分由一個Thread Pool的執行緒負責。
參考資料來源:
[1]How to: Make Multiple Web Requests in Parallel by Using Async and Await (C# and Visual Basic)
http://msdn.microsoft.com/en-us/library/hh696703.aspx
補充資料來源:
[1]Parallel Class
http://msdn.microsoft.com/en-us/library/system.threading.tasks.parallel(v=vs.110).aspx
[2]Parallel LINQ (PLINQ)
http://msdn.microsoft.com/en-us/library/dd460688(v=vs.110).aspx
[3]Task Parallel Library (TPL)
http://msdn.microsoft.com/en-us/library/dd460717(v=vs.110).aspx
[4]Task Parallelism (Task Parallel Library)
http://msdn.microsoft.com/en-us/library/dd537609(v=vs.110).aspx
[5]TPL and Traditional .NET Framework Asynchronous Programming
http://msdn.microsoft.com/en-us/library/dd997423.aspx
[6]Fine-Tuning Your Async Application (C# and Visual Basic)
http://msdn.microsoft.com/en-us/library/jj155761.aspx
[7]Task-based Asynchronous Pattern
http://www.microsoft.com/en-us/download/details.aspx?id=19957