快速提问,我正在尝试异步执行一个方法并发出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);
}
答案 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;
}