簡體   English   中英

C#異步方法未在類下顯示

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM