2015-09-29 110 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