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

use*_*110 0 .net c# 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);
}
Run Code Online (Sandbox Code Playgroud)

Yuv*_*kov 6

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

因为Main是静态的,而你的方法则不是.标记为static:

public static async Task JobAsync()
Run Code Online (Sandbox Code Playgroud)

注意我改变了你的方法async Task而不是async void.后者只适用于顶级事件处理程序.另请注意,如果执行JobAsyncMain,你必须使用它来明确等待JobAsync().Wait()(你只应该使用Wait一个控制台应用程序main方法里面,因为它同步块.对于所有其他情况,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;
}
Run Code Online (Sandbox Code Playgroud)