Fac*_*Vir 17 .net c# task-parallel-library
我正在尝试以编程方式将C#4中的异步操作链接起来,例如写入给定的Stream对象.我最初是"手动"执行此操作,将回调挂钩从一个操作到下一个操作,但我想我会尝试使用.NET 4任务并行库来省去重新发明并发轮的麻烦.
首先,我将异步调用包装在Tasks中,如下所示:
public static Task CreateWriteTask(Stream stream, byte[] data)
{
return Task.Factory.FromAsync(stream.BeginWrite, stream.EndWrite, data, 0, data.Length, null);
}
Run Code Online (Sandbox Code Playgroud)
Continuations使链接同步操作变得非常容易(如果您原谅不幸的方法名称):
public static Task ChainFlush(Stream stream, Task precedingTask)
{
return precedingTask.ContinueWith(x => stream.Flush());
}
Run Code Online (Sandbox Code Playgroud)
但是没有任何版本的Task.ContinueWith方法可以像接受同样的方式接受异步操作TaskFactory.FromAsync.
所以,假设我坚持使用TPL,我正在寻找这种方法的正确实现:
public static Task ChainWrite(Stream stream, byte[] data, Task precedingTask)
{
//?
}
Run Code Online (Sandbox Code Playgroud)
Fac*_*Vir 12
到目前为止,我最好的想法是链接新写入任务的创建,然后使用Unwrap扩展方法Task<Task>转回Task:
public static Task ChainWrite(Stream stream, byte[] data, Task precedingTask)
{
return precedingTask.ContinueWith(x => CreateWriteTask(stream, data)).Unwrap();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5175 次 |
| 最近记录: |