使用异步任务重新抛出异常?

时间:2016-06-24 16:26:11

标签: c# winforms

我有这段代码:

try
{
    await Task.Run(() =>
    {
        token.ThrowIfCancellationRequested();
        //Call WebApi...
    }, token);
}
catch (OperationCanceledException oex)
{ }
catch
{
    throw;
}

await中的方法返回代码200或抛出我想要评估的特定异常。

由于操作可取消,可能会抛出OperationCanceledException,我只想忽略它。

以上应该有效。但是,是否可以使用catchwhen语句与新的C#6.0语法合并?

1 个答案:

答案 0 :(得分:1)

你不需要C#6,只需摆脱最后一个阻止块,只有OperationCanceledException

try
{
    await Task.Run(() =>
    {
        token.ThrowIfCancellationRequested();
        //Call WebApi...
    }, token);
}
catch (OperationCanceledException oex)
{ }

您可能想要对C#6做的一件事是检查用于提取摘要的令牌是您传入的令牌

try
{
    await Task.Run(() =>
    {
        token.ThrowIfCancellationRequested();
        //Call WebApi...
    }, token);
}
catch (OperationCanceledException oex) when (oex.CancellationToken == token)
{ }

或使用旧样式

try
{
    await Task.Run(() =>
    {
        token.ThrowIfCancellationRequested();
        //Call WebApi...
    }, token);
}
catch (OperationCanceledException oex)
{ 
    if(oex.CancellationToken != token)
        throw;
}