File
這個類有很多相當方便的方法,比如ReadAll***
/WriteAll***
/AppendAll***
。FIle.ReadAll *** Async/WriteAll *** Async/AppendAll ***異步方法?
我遇到了一些情況,當我需要他們的異步對應方,但他們只是不存在。
爲什麼?有沒有什麼陷阱?
我知道,這些方法可以很容易地實現,但是有什麼理由不在框架中實現它們嗎?
File
這個類有很多相當方便的方法,比如ReadAll***
/WriteAll***
/AppendAll***
。FIle.ReadAll *** Async/WriteAll *** Async/AppendAll ***異步方法?
我遇到了一些情況,當我需要他們的異步對應方,但他們只是不存在。
爲什麼?有沒有什麼陷阱?
我知道,這些方法可以很容易地實現,但是有什麼理由不在框架中實現它們嗎?
「...我需要它們的異步對應,但它們不存在,爲什麼?」
所有患者採用異步的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.BeginReadAll
和File.EndReadAll
這是可以理解的,有沒有File.ReadAllAsync
。
有沒有什麼隱患?
實現這些方法的唯一缺陷是以真正異步的方式這樣做,而不是僞造異步。
downvoter,有什麼解釋? – Dennis
也許我不明白你的問題,但這不夠嗎?靜態異步任務WriteAllTextAsync(字符串路徑,字符串內容){等待Task.Run(()=> File.WriteAllText(路徑,內容)); }' –
@codroipo:這叫做「異步同步」,必須避免。例如,請參閱此文章:http://blog.stephencleary.com/2013/10/taskrun-etiquette-and-proper-usage.html – Dennis