我有这段代码:
try
{
await Task.Run(() =>
{
token.ThrowIfCancellationRequested();
//Call WebApi...
}, token);
}
catch (OperationCanceledException oex)
{ }
catch
{
throw;
}
await
中的方法返回代码200或抛出我想要评估的特定异常。
由于操作可取消,可能会抛出OperationCanceledException
,我只想忽略它。
以上应该有效。但是,是否可以使用catch
将when
语句与新的C#6.0语法合并?
答案 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;
}