【发布时间】:2020-06-29 02:06:32
【问题描述】:
试图弄清楚这一点,但找不到任何确定的东西。
假设我有一个类可以异步执行一些工作并且可以动态启动或停止:
class ModelObject
{
private CancellationTokenSource cts;
private CancellationToken ct;
private Progress<int> progress;
private async Task DoSomething(IProgress<int> progress)
{
...
while (DoingSomething)
{
if (ct.IsCancellationRequested)
{
await Task.Delay(10000); // Take our sweet time to cancel
// Cancel work and return
}
...
}
}
public async void StartAsync()
{
progress = new Progress<int>(...);
cts = new CancellationTokenSource();
ct = cts.Token;
await DoSomething(progress);
}
public void Stop()
{
ct.Cancel();
// HELP: await while DoSomething cancels
// perform cleanup
}
}
当DoSomething 的现有实例 取消时,我不确定如何await。
典型的用法是这样的:
ModelObject modelObject = new ModelObject();
modelObject.StartAsync();
modelObject.Stop();
任何帮助将不胜感激。
【问题讨论】:
-
请注意:
async void不好。应该是async Task。 -
minimal reproducible example 在这里会很棒。很难说出您正在清理什么,因此很难提供解决方案。
-
@Enigmativity 嗨做了一个小改动,希望这可能会有所帮助。清理,如删除正在处理的文件等。
-
您阅读minimal reproducible example 页面了吗?你肯定没有提供任何类似的东西。
标签: c# asynchronous async-await task