【发布时间】:2016-10-20 10:37:54
【问题描述】:
我正在寻找一种方法来取消已经启动的任务,然后使用新的输入数据重新启动相同的任务。
以下是我编写的示例代码,但它不起作用。
private CancellationTokenSource _cancellationTokenSource;
public public async Task DoSomething(string input)
{
_cancellationTokenSource.Cancel(true);
_cancellationTokenSource = new CancellationTokenSource();
try
{
Task.Run(async () =>
{
//Asynchronous method code here which uses input like database operations.
await doSomeDataBaseOperationAsync(input);
}, _cancellationTokenSource.Token);
}
catch { }
}
有人可以帮我吗?
【问题讨论】:
-
取消是手工制作的;您必须检查您的令牌状态以查看是否已请求取消,并尽您所能实际取消。
-
什么不起作用?从你调用
DoSomething的地方你可以简单地调用_cancellationTokenSource.Cancel(true);这将取消任务然后再次调用该方法。它不工作吗? -
cancellationTokenSource.Cancel(true);这段代码在初始化之前,有效吗? -
另外,
DoSomething方法中的cancellationTokenSource变量是什么?它似乎没有在您的代码块中的任何地方定义。 -
基本上我的 doSomeDataBaseOperationAsync(input) 仍然使用旧输入执行,然后从新输入开始。