【发布时间】:2017-05-30 07:14:48
【问题描述】:
我想在与我的 GUI 不同的线程中调用一个函数。
我使用下面的代码来触发这个功能:
private void button1_Click(object sender, EventArgs e)
{
tokensource = new CancellationTokenSource();
var token = tokensource.Token;
Task.Run(()=>foo() , token);
}
private void foo()
{
// Uses some resources
}
private void button2_Click(object sender, EventArgs e)
{
tokenSource.Cancel();
}
任务取消时如何安全关闭foo()中占用的资源?
【问题讨论】:
-
如何清理取决于这些资源实际上是什么以及
foo()的实现是什么。您的问题中不存在这些细节。见minimal reproducible example 和How to Ask。 -
"当任务被取消时" - 当您在取消令牌上调用
Cancel时,任务不会自动取消。每个任务都应该接收和处理令牌,这是你可以释放所有资源的地方。
标签: c# cancellation