我正在启动一些关于.net中的异步编程的测试,现在我被困在尝试使用cancellationToken取消一个长操作。操作正在运行时的同步取消操作
所以我有以下代码:
CancellationTokenSource cancelationToken = new CancellationTokenSource();
我的按钮来启动操作
private void button2_Click(object sender, EventArgs e)
{
cancelationToken.Cancel(true);
}
private void button1_Click(object sender, EventArgs e)
{
StartOperation(cancelationToken.Token);
}
最后我的操作
private async void StartOperation(CancellationToken cancelToken)
{
await GetItensFromDatabase2(cancelToken);
}
public static Task<int> GetItensFromDatabase(CancellationToken cancelToken)
{
//cancelToken.Register(() => Console.WriteLine("Canceled"));
return Task.Factory.StartNew<int>(() =>
{
int result = 0;
cancelToken.ThrowIfCancellationRequested();
result = MyLongOperation(); // Simulates my operation -> I want to cancel while this operation is still running
return result;
}, cancelToken);
}
那么,如何取消MyLongOperation()方法 ?有可能吗?
对于'async'代码,请使用'Task.Run'而不是'StartNew'; [我解释了为什么在我的博客](http://blog.stephencleary.com/2013/08/startnew-is-dangerous.html)。 –
Task.Run不存在于.net 4中 – mmarques
在'Microsoft.Bcl.Async'中,它是'TaskEx.Run'。 –