亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在線程或任務中進行異步操作

如何在線程或任務中進行異步操作

C#
冉冉說 2023-08-13 16:00:19
我需要做一些需要異步的操作(比如向數據庫寫入一些內容,同時從中讀取一些內容,反序列化我從中讀取的內容,對這些數據執行某些操作...等等),但我需要要么在線程上執行此操作,要么在任務上執行此操作,以便我可以在執行期間執行其他操作。此外,如果可以喜歡,總是一方面讀取數據庫,另一方面在其中寫入數據,那就太好了,我很確定這是可能的,但我不確定如何實現它,以及使用什么庫/工具/功能...等我正在開發控制臺應用程序我嘗試了一些東西,例如帶有一些等待的異步方法,但我不太了解所有這些之間的執行順序,問題還在于我不太了解 / 關鍵字以及如何工作,但async我await嘗試Task了少量。我正在研究的實際上是 2 Task.Run,一個在數據庫方法中寫入數據,另一個Task.Run讀取數據庫,問題是在這兩個方法中,我都有函數async,然后,需要等待它們某處,因此也需要等待對寫入數據或讀取數據的調用,但我不知道如何制作Task.Run asyncstatic async Task Main(string[]args){// Those two tasks need to run at the same time    Task.Run(() =>    {        // Need to be awaited        var writer = WritingDatabase();    }    Task.Run(() =>    {        // Need to be awaited as well        var reader = ReadingDatabase();    }}public async Task<List<Code>> ReadingDatabase(){      List<Code> listCode = new List<Code>();      // Some code      listCode.Add(await database.ReceiveMessageAsync());      return listCode;}上面的代碼是一個示例,其中可能存在一些錯誤,但我的代碼的功能是存在的
查看完整描述

3 回答

?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

通常這就是等待所有任務異步完成的方式:

await?Task.WhenAll(myArrayOfTasks);

要在內部等待,Task.Run只需傳遞異步委托(一些讀取):

Task.Run(async?()?=>
{????await?Task.Delay(1000);
});

另外,了解為什么在實踐中要避免Task.Run:Task.Run Etiquette 和正確用法以及更多示例也會很有幫助。簡而言之,您不應該用 包裝阻塞 APITask.Run,這是沒有意義的,因為底層線程無論如何都會被阻塞。對于非阻塞 API 來說,一個好的設計是 return?Task,因此您無論如何都不需要運行新的 API。


查看完整回答
反對 回復 2023-08-13
?
拉風的咖菲貓

TA貢獻1995條經驗 獲得超2個贊

你需要這樣做:


static async Task Main(string[] args)

{

    var tasks = new[]

    {

        Task.Run(() =>

        {

            // Need to be awaited

            var writer = WritingDatabase();

        }),


        Task.Run(() =>

        {

            // Need to be awaited as well

            var reader = ReadingDatabase();

        })

    };


    await Task.WhenAll(tasks);

}


查看完整回答
反對 回復 2023-08-13
?
侃侃無極

TA貢獻2051條經驗 獲得超10個贊

由于您已經擁有Task返回 API,因此您可以執行以下操作:


static async Task Main(string[]args)

{

    await Task.WhenAll(WritingDatabase, ReadingDatabase);

}


查看完整回答
反對 回復 2023-08-13
  • 3 回答
  • 0 關注
  • 150 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號