我有一个任务<T>:
这将导致
Task<A> someTask = ...
这个任务可能会成功、失败或取消。
当任务成功时,我想要改变结果,否则保留原结果。
当 someTask
抛出异常时,这似乎非常困难。
我尝试过:
Task<B> resultTask = StartMyTask().ContinueWith<B>(
t => Foo(t.Result),
TaskContinuationOptions.OnlyOnRanToCompletion);
这将导致
someTask
出现故障时,resultTask
被取消。我希望它出现故障。Task<B> resultTask = StartMyTask().ContinueWith<B>(
t => Foo(t.Result));
这会因为.Result
抛出异常而中断Visual Studio调试器。如果我按F5,resultTask
会像预期的那样失败,但是这很糟糕。
是否有办法让resultTask
在someTask
失败时具有与someTask
相同的结果?
本质上,我想用任务来表达类似于这样的东西:
int F()
{
throw new SomeException();
}
string G(int x)
{
return x.ToString();
}
try
{
string result = G(F());
}
catch (SomeException e)
{
...
}