【发布时间】:2013-04-26 22:33:40
【问题描述】:
我有一个方法或多或少地调用三个不同的异步方法,然后返回一个包含成功消息的“结果”对象。这三个异步方法中的任何一个都可能抛出一个SshException,所以我将所有三个都放在一个try{}catch{} 中,它捕获AggregateException,处理SshException,然后返回一个失败结果对象。
由于我在 .Net 4.0 上,我无法使用 async/await(我相信这可以轻松解决我的问题),但我想将该方法转换为返回包含两个结果之一的 Task 的方法:
- “成功”如果之前的三个任务都成功完成。
- “失败”如果任何之前的任务出错。理想情况下,任务执行也会在第一个取消的任务处停止(例如,三个工作任务的 TaskContinuationOptions.NotOnFaulted)。
这里有一些示例代码:
public UploadResult UploadFileToDir(string dir, string text)
{
try
{
SftpClient.Cd(dir).Wait(); // This is a Task
var filename = this.GetFilename().Result; // This is also a Task
SftpClient.WriteFile(filename, text).Result; // This is the last Task
return UploadResult.Success;
}
catch(AggregateException agg)
{
if(agg.InnerException is SshException)
{
return UploadResult.Failure;
}
throw;
}
}
【问题讨论】:
标签: c# .net-4.0 task-parallel-library