不知何故,我的异常似乎被它们正在执行的方法捕获。这是调用该方法的代码。如您所见,我创建了一个超时的取消令牌。我注册了一个在取消令牌触发时调用的方法,然后我开始一个新任务。取消令牌似乎工作正常。注册方法也是如此。
var cancellationToken = new CancellationTokenSource(subscriber.TimeToExpire).Token;
cancellationToken.Register(() =>
{
subscriber.Abort();
});
var task = Task<bool>.Factory.StartNew(() =>
{
subscriber.RunAsync((T)messagePacket.Body, cancellationToken);
return true;
})
.ContinueWith(anticedant =>
{
if (anticedant.IsCanceled)
{
Counter.Increment(12);
Trace.WriteLine("Request was canceled");
}
if (anticedant.IsFaulted)
{
Counter.Increment(13);
Trace.WriteLine("Request was canceled");
}
if (anticedant.IsCompleted)
{
Counter.Increment(14);
}
下一段代码是似乎不仅抛出异常(预期行为。而且捕获异常)的方法。
public async override Task<bool> ProcessAsync(Message input, CancellationToken cancellationToken)
{
Random r = new Random();
Thread.Sleep(r.Next(90, 110));
cancellationToken.ThrowIfCancellationRequested();
return await DoSomethingAsync(input);
}
取消令牌引发了异常,但根据 Intellitrace,它在方法结束时被捕获。我尝试了许多不同的选项,包括抛出我自己的异常,但无论 continuewith 函数总是执行 IsComleted 或运行到完成代码。关于我做错了什么的任何想法?谢谢