2010-02-10 25 views
0

我只是很好奇,知道爲什麼在C#中異步調用的返回類型是IAsynceResult?爲什麼異步調用的返回類型是.NET中的IAsyncResult?

+0

@Praveen:這個問題與C#無關。 VB.NET中異步調用的返回類型與所有.NET語言中的返回類型相同。這是因爲它不是一種語言功能 - 它是一種.NET功能。看到區別? – 2010-02-10 11:04:48

回答

2

它還會是什麼?它不能成爲電話會議的「最終」結果,因爲這還不知道。基本上它是一個代表異步調用的值,以便您稍後可以確定它是否完成,結果是什麼等。

對於非無效的異步調用,這不是通用的(在結果類型中),但這是由於.NET 1不支持泛型的遺留問題。

編輯:我幾乎提到Task<T>最初。麻煩的是,有很多地方已經聲明該方法返回IAsyncResult,並且您不能僅僅改變左側,右側和中間的API。我偶爾想知道如果MS在發佈之前等待泛型,那麼.NET會有多大的變化。當然,這種論點總是適用的,但對於泛型而言,IMO尤其重要。

+1

我同意 - 泛型顯然提供了一個更好的解決方案,並且遺憾的是,.Net框架的這個領域自成立以來一直被忽視。這就是說 - 在整個框架中可能會發生很大的變化,所以我不會因爲猶豫而責怪他們! – 2010-02-10 11:05:06

+2

當然PFX確實提供了這樣一個通用的回報:'任務 .Factory.FromAsync'返回一個'任務',並且'任務'實現'IAsyncResult'。最後得到一個更好的模型。 – Richard 2010-02-10 11:05:33

1

IAsyncResult提供了監視異步調用進度的能力,並提供了一個'token',稍後可以將其傳遞給您通常看到的異步方法對的'Complete___'方法。

由於異步調用無法返回操作的實際值,因此此接口爲該調用的狀態提供了一個容器,以便稍後使用該容器來獲取結果。

當考慮到您可能對同一個未完成的方法進行多個異步調用時,這一點尤其重要 - IAsyncResult實例有助於單獨識別每個方法。

1

因爲這是一個異步調用,實際的最終結果還不知道。所以,返回類型基本上是您對所做調用的引用,因此您可以跟蹤它的完成時間。

認爲它有點像您將包裹關閉以便通過記錄/追蹤遞送遞送時獲得的機票 - 該機票爲您提供了檢查遞送進度並在稍後進行跟蹤的方法。

0

由於經典的異步模式實現。

IAsyncResult對象返回開始方法並表示一個單獨的異步操作。它包含方法和屬性,提供有關異步操作的一些基本信息。

0

進行一次異步呼叫就像是要求某人出門,並在方便時做些事情。 IAsyncResult是該請求的句柄。您可以使用它來等待任務完成,查詢進度,並從任務中獲取任何結果和/或例外。反而會更喜歡什麼?

相關問題