【问题标题】:How to dispose a task in List<Task> [closed]如何在 List<Task> 中处理任务 [关闭]
【发布时间】:2021-04-14 12:05:52
【问题描述】:

我使用 Winform,我希望以非异步方式运行,但未处理返回。 谁能帮帮我?

public class MyExample : IDisposable
{
    private List<Task> tasks = new List<Task>();

    public async Task DoSomething()
    {
        // Track your async Tasks
        tasks.Add(DoSomethingElseAsync());
        tasks.Add(DoSomethingElseAsync());
        tasks.Add(DoSomethingElseAsync());

        await Task.WhenAll(tasks);
    }

    public async Task DoSomethingElseAsync()
    {
        if(false){
          //handle dispose
          return;
        }
    }
}

【问题讨论】:

  • 在这种情况下“处理处置”是什么意思?你认为需要处理什么?如果您的意思是MyExample,那么通常拥有MyExample 实例的代码可以调用.Dispose()
  • 感谢您的回复。我正在学习 c#,我的英语很差。我发现使用 cancelTokenSource.cancel();

标签: c# winforms async-await


【解决方案1】:

在您的示例中,您的类不需要因为任务而实现 IDisposable:

public class MyExample
{
    public async Task DoSomething()
    {
        var tasks = new List<Task>();    

        // Track your async Tasks
        tasks.Add(DoSomethingElseAsync());
        tasks.Add(DoSomethingElseAsync());
        tasks.Add(DoSomethingElseAsync());

        await Task.WhenAll(tasks);
    }

    public async Task DoSomethingElseAsync()
    {
        if(false){
          return;
        }
    }
}

如果您打算在任务完成之前停止,您应该让任务能够接受和使用取消令牌。

一般情况下,任务不需要处理:Do I need to dispose of Tasks?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多