[英]c# async method not showing under class
快速問題,我試圖異步執行一個方法並發出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);
}
但是它仍然沒有顯示為可用的執行方法。
因為Main
是靜態的,而您的方法卻不是。 將其標記為static
:
public static async Task JobAsync()
注意我將您的方法更改為async Task
而不是async void
。 后者僅適用於頂級事件處理程序。 另外,請注意,如果您在Main
執行JobAsync
,則必須使用JobAsync().Wait()
顯式等待它(您應僅在控制台應用程序main方法內部使用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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.