c#异步方法没有显示在类下面

时间:2015-05-13 12:34:44

标签: c# .net multithreading asynchronous async-await

快速提问,我正在尝试异步执行一个方法并发出3个线程。我做了一个小方法并在Program.cs类中尝试了它,以及一个单独的类,但它仍然没有显示为可用的执行方法。有人在上一个问题中告诉我,你不能在main中执行异步任务,你必须在一个单独的方法中执行它。

所以我创建了一个单独的方法,但是我不确定如何调用它。每个任务都返回一个数据表。

如何调用异步方法从main执行?我的审讯结果应该是主要的吗?

static void Main(string[] args)
{
}

public async void job()
{
    SchoolData CSD = new SchoolData();
    FloData FD = new FloData();
    GiftData GD = new GiftData();

    List<Task<DataTable>> tasks = new List<Task<DataTable>>();

    tasks.Add(Task.Run(() => CSD.getSchool()));
    tasks.Add(Task.Run(() => FD.getFlo()));
    tasks.Add(Task.Run(() => GD.getGift()));

    var Results = await Task.WhenAll(tasks);
}

1 个答案:

答案 0 :(得分:6)

  

但它仍然没有显示为可用的执行方法。

因为Main是静态的,并且您的方法不是。将其标记为static

public static async Task JobAsync()

注意我将您的方法更改为async Task而不是async void。后者只适用于顶级事件处理程序。另请注意,如果您在JobAsync中执行Main,则必须使用JobAsync().Wait()明确等待它(您应该只在控制台应用程序中使用Wait同步阻塞的主方法。对于所有其他情况,await应该用于异步等待。)

  

我如何查询结果?

异步等待所有任务后,您可以访问他们的Result属性:

tasks.Add(Task.Run(() => CSD.getSchool()));
tasks.Add(Task.Run(() => FD.getFlo()));
tasks.Add(Task.Run(() => GD.getGift()));

var Results = await Task.WhenAll(tasks);

foreach (var task in tasks)
{
   // Access the result property
   var result = task.Result;
}