2015-09-29 89 views
6

File這個類有很多相當方便的方法,比如ReadAll***/WriteAll***/AppendAll***FIle.ReadAll *** Async/WriteAll *** Async/AppendAll ***異步方法?

我遇到了一些情況,當我需要他們的異步對應方,但他們只是不存在。

爲什麼?有沒有什麼陷阱?
我知道,這些方法可以很容易地實現,但是有什麼理由不在框架中實現它們嗎?

+0

downvoter,有什麼解釋? – Dennis

+0

也許我不明白你的問題,但這不夠嗎?靜態異步任務WriteAllTextAsync(字符串路徑,字符串內容){等待Task.Run(()=> File.WriteAllText(路徑,內容)); }' –

+3

@codroipo:這叫做「異步同步」,必須避免。例如,請參閱此文章:http://blog.stephencleary.com/2013/10/taskrun-etiquette-and-proper-usage.html – Dennis

回答

4

「...我需要它們的異步對應,但它們不存在,爲什麼?」

所有患者採用異步的await(不包括在考慮異步開發的新庫)添加到.NET框架一起XXXAsync方法只是圍繞BeginXXX/EndXXX包裝。

他們沒有添加任何新的異步操作,他們只是將舊的操作轉換爲新的基於任務的操作。例如,這是UdpClient.SendAsync

public Task<int> SendAsync(byte[] datagram, int bytes) 
{ 
    return Task<int>.Factory.FromAsync(BeginSend, EndSend, datagram, bytes, null); 
} 

因爲沒有File.BeginReadAllFile.EndReadAll這是可以理解的,有沒有File.ReadAllAsync

有沒有什麼隱患?

實現這些方法的唯一缺陷是以真正異步的方式這樣做,而不是僞造異步。

+1

因此,爲了重述您的答案,「我們太懶惰了」。 :) – Dennis

+0

@Dennis更像他們沒有向舊圖書館添加新功能(但是是...)。 – i3arnon