首页 > 解决方案 > 在 C# 中返回任务的正确方法

问题描述

我有一个场景,我需要返回一个可以等待调用者的方法。

我在这里有我的实​​现,我只想知道哪个是正确的。

方法一。

public class ClassA
{
    public Task MyTask { get; set; }
    public ClassA()
    {
       MyTask = MyAsyncMethod();
    }

    private async void MyAsyncMethod()
    {
       await LongProcessHere();
    }
}

public class MyCaller()
{
   private async void ExecuteAsync()
   {
      ClassA ca = new ClassA();
      await ca.MyTask;
   }
}

方法2。

public class ClassA
{
    public Task MyAsyncMethod()
    {
       return Task.Run(async()=>
       {
          await LongProcessHere();
       });
    }
}

public class MyCaller()
{
   private async void ExecuteAsync()
   {
      ClassA ca = new ClassA();
      await ca.MyAsyncMethod();
   }
}

标签: c#asynchronousasync-await

解决方案


如果您问我是否应该公开属性或方法,那么这完全取决于所Task代表的内容。

如果任务是每个类的实例完成一次,那么有一个Task属性是合适的。通常在这种情况下,该属性表示有关实例的某些内容,例如“我的初始化已完成”“我已完成处理”

如果任务是您需要多次执行的任务,那么使用Task-returning 方法是合适的。

Task-返回方法比Task属性更常见。

在旁注中,避免async void并且不要Task.Run不必要地使用.


推荐阅读