摘要:非同步方法與平行處理

  • 987
  • 0

摘要:非同步方法與平行處理

首先,將上方的程式法一分為二,修改為下方的程式碼。


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