FIle.ReadAll***Async/WriteAll***Async/AppendAll***异步方法在哪里?
Where are FIle.ReadAll***Async/WriteAll***Async/AppendAll***Async methods?
File
class里面有一堆比较方便的方法,比如ReadAll***
/WriteAll***
/AppendAll***
.
我遇到过很多情况,当我需要它们的异步对象时,它们根本不存在。
为什么?有什么陷阱吗?
我知道,这些方法可以很容易地实现,但是有什么理由不在开箱即用的框架中实现它们吗?
"... I need their asynchronous counterparts, but they just don't exist. Why?"
与 async-await 一起添加到 .Net 框架的所有 XXXAsync
方法(不包括考虑异步开发的新库)只是 BeginXXX
/[= 的包装器13=].
他们没有添加任何新的异步操作,只是将旧的异步操作转换为新的基于任务的操作。例如这是 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
也是可以理解的。
Are there any pitfalls?
实现这些方法的唯一缺陷是以真正异步的方式执行,而不是假装异步。
File
class里面有一堆比较方便的方法,比如ReadAll***
/WriteAll***
/AppendAll***
.
我遇到过很多情况,当我需要它们的异步对象时,它们根本不存在。
为什么?有什么陷阱吗?
我知道,这些方法可以很容易地实现,但是有什么理由不在开箱即用的框架中实现它们吗?
"... I need their asynchronous counterparts, but they just don't exist. Why?"
与 async-await 一起添加到 .Net 框架的所有 XXXAsync
方法(不包括考虑异步开发的新库)只是 BeginXXX
/[= 的包装器13=].
他们没有添加任何新的异步操作,只是将旧的异步操作转换为新的基于任务的操作。例如这是 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
也是可以理解的。
Are there any pitfalls?
实现这些方法的唯一缺陷是以真正异步的方式执行,而不是假装异步。