User Tools

Site Tools


Action disabled: revisions
blog:2025-04-23-001



2025-04-23 C# 呼叫 async Task Task_SaveWebToJPG() 等待執行完成後再繼續

  • 希望在 C# 中呼叫 Task_SaveWebToJPG 方法,並確保在該方法執行完成後才繼續執行後續程式碼。
  • 以下是程式碼,確保 await 正確使用以等待非同步任務完成。

程式碼

  • private async Task Task_SaveWebToJPG()
    {
        try 
        {
            Console.WriteLine("Web main screen capture and save to file.");
            await Task_ChromePageScreenCaptureToFile(@"./LOG/main_screen_dump.png");
        } 
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }
    
    // 呼叫方法並等待完成
    private async Task ExecuteSaveWebToJPG()
    {
        await Task_SaveWebToJPG();
        // 在這裡繼續執行後續程式碼,確保 Task_SaveWebToJPG 已完成
        Console.WriteLine("Screen capture completed. Proceeding with next steps.");
    }

說明

  • await 使用:在 Task_SaveWebToJPG 方法中,已經正確使用了 await 來等待 Task_ChromePageScreenCaptureToFile 完成。
  • 外部呼叫等待:如果您是在其他地方呼叫 Task_SaveWebToJPG,則需要在呼叫時同樣使用 await,以確保該方法完成後才執行後續程式碼。例如在 ExecuteSaveWebToJPG 方法中所示。
  • 異常處理:保留了原有的 try-catch 區塊,確保異常能夠被捕獲並顯示在 MessageBox 中。

如果在非非同步方法中呼叫

  • 如果您需要在一個非非同步方法(例如 void 方法)中呼叫 Task_SaveWebToJPG,可以使用 Task.Wait() 或 Task.Result,但這可能導致阻塞 UI 線程,建議盡量避免。如果不得已,可以這樣做:
  • private void ExecuteSaveWebToJPG_Sync()
    {
        Task_SaveWebToJPG().Wait(); // 同步等待任務完成,但可能阻塞 UI 線程
        Console.WriteLine("Screen capture completed. Proceeding with next steps.");
    }
  • 注意:使用 Wait() 可能導致死鎖,尤其是在 UI 應用程式中,建議盡可能使用 await 並將方法設計為非同步。

TAGS

  • 5 person(s) visited this page until now.

blog/2025-04-23-001.txt · Last modified: 2025/04/23 14:02 by jethro