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)
但它仍然没有显示为可用的执行方法.
因为Main是静态的,而你的方法则不是.标记为static:
public static async Task JobAsync()
Run Code Online (Sandbox Code Playgroud)
注意我改变了你的方法async Task而不是async void.后者只适用于顶级事件处理程序.另请注意,如果执行JobAsync中Main,你必须使用它来明确等待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)
| 归档时间: |
|
| 查看次数: |
342 次 |
| 最近记录: |