【发布时间】:2016-04-04 01:09:15
【问题描述】:
我有一些代码使用带有取消令牌的Task.Run。
这是我的代码:
public class TaskObject
{
CancellationTokenSource _source = new CancellationTokenSource();
public async Task TaskAction()
{
var task = Task.Run(async delegate
{
await TaskRun();
}, _source.Token);
//TaskCancel();
try
{
task.Wait();
}
catch (Exception ex)
{
}
}
public async Task TaskRun()
{
if (_source.IsCancellationRequested)
{
_source.Token.ThrowIfCancellationRequested();
}
SpeechSynthesizer _speechSynthesizer = new SpeechSynthesizer();
_speechSynthesizer.SpeakAsync("This is a test prompt");
}
public void TaskCancel()
{
_source.Cancel();
}
}
如果我在TaskAction()中调用TaskCancel(),就会捕获到任务取消异常。
如果我从对象外部调用TaskCancel(),则不会捕获已取消的异常。
这里有一些代码来演示取消的异常没有被捕获:
taskObject = new TaskObject();
await taskObject.TaskAction();
taskObject.TaskCancel();
如何从对象外部调用TaskCancel() 以便捕获已取消的异常?
【问题讨论】:
标签: c# task cancellationtokensource