第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

為什么此異步/等待代碼不會死鎖

為什么此異步/等待代碼不會死鎖

C#
料青山看我應如是 2022-08-20 15:19:06
我正在閱讀這篇關于死鎖的文章,我嘗試使用自己的代碼,它沒有死鎖問題。為什么?我期待:GetJsonAsync完成等待并即將返回jsonStringMain正在執(zhí)行并保留上下文jsonTask.ResultGetJsonAsync想要返回,直到上下文可用jsonString死鎖將會發(fā)生   public static void Main(string[] args)    {        var jsonTask = GetJsonAsync();        int i = jsonTask.Result;        Console.WriteLine(jsonTask.Result);    }    public static async Task<int> GetJsonAsync()    {        var jsonString = await ReturnIntAsync();        return jsonString;    }    public static async Task<int> ReturnIntAsync()    {        int i = 0;        await Task.Run(() => i++);        return i;    }
查看完整描述

1 回答

?
慕后森

TA貢獻1802條經(jīng)驗 獲得超5個贊

它不會死鎖,因為沒有同步,因此該方法在線程池線程(而不是主線程)上恢復執(zhí)行。SynchronizationContextasync

本文的相關引文(著重號為作者所加):

情況是這樣的:請記住,在我的介紹性帖子中,在您等待任務后,當方法繼續(xù)時,它將在上下文中繼續(xù)。

在第一種情況下,此上下文是 UI 上下文(適用于控制臺應用程序以外的任何 UI)。在第二種情況下,此上下文是 ASP.NET 請求上下文...

對于 UI 示例,“上下文”是 UI 上下文;對于 ASP.NET 示例,“上下文”是 ASP.NET 請求上下文。這種類型的死鎖可以對任何一個“上下文”造成。

如果你確實希望以這種方式使控制臺應用程序死鎖,則可以使用我的 AsyncEx 庫中在控制臺應用程序的主線程上安裝單線程上下文。AsyncContext


查看完整回答
反對 回復 2022-08-20
  • 1 回答
  • 0 關注
  • 92 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號