2009-09-23 78 views
3

因爲我可以使用委託來執行異步操作,所以我懷疑有很少機會在我的應用程序中使用System.Threading。是否存在任何我無法避免System.Threading的基本情況?C# - 作爲委託做Asyn任務仍然需要System.Threading?

(只是我在學習階段)。

例子:

class Program 

{ 

public delegate int Total (int a,int b); 

static void Main() 

{ 

    Total tl = new Total(SumUp); 
    IAsyncResult isany=tl.BeginInvoke(20,20, null, null); 

    while (!isany.IsCompleted) 
    { 
     Console.WriteLine("Busy with other work"); 
    } 

    int ans = tl.EndInvoke(isany); 

    Console.WriteLine("Result ={0}", ans); 

} 

static int SumUp(int a,int b) 

{ 
    a = a * a; 

    b = b * b; 

    return a + b; 

} 
} 

回答

8

我們不斷獲得更好,更好的抽象,處理併發性,所以更低層次的構造往往是沒有必要的。

您已經找到了這樣一個更高級別抽象的例子,而.NET 4.0將爲我們提供一些處理併發代碼的新方法和非常強大的方法,例如任務和延續。

隨着時間的推移,您應該能夠處理更高級別和更高級別的併發性抽象。在我看來,這些抽象是否存在於System.Threading中並不重要。

+0

馬克,做異步代表與線程或併發?我很困惑這裏的一些反應http://stackoverflow.com/q/10533971/328397 – LamonteCristo 2012-05-10 12:38:02

-1

我還需要的System.Threading

你所說的 「需要」 的意思? System.threading的類型在總是加載的mscorlib程序集中定義。如果您想避免代碼中的完全限定名稱,則只需說using System.Threading

2

異步委託在thread pool上運行,詳情如下:here。我不得不使用顯式線程的一種情況是在後臺運行UI任務,因爲線程池線程都是多線程單元,而UI任務只能在單線程單元中運行。上面的鏈接還提供了一些不適合使用線程池的情況。

雖然大多數短命的後臺任務應該使用線程池或異步委託來完成,但仍然會出現需要創建顯式線程的情況。 System.Threading不會很快消失。

+0

thecoop是正確的。 。 。他的回答暗示,線程池線程是有限的資源。一個很好的練習就是編寫一個小程序包,模擬非線程池線程上的Begin/EndInvoke功能。你可以實現IAsyncResult,泛型方法,回調和其他好東西來完善這個包。 – TheEruditeTroglodyte 2009-12-05 23:48:51