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