async await 的一些知識 死鎖問題

2022-02-12 07:44:06 字數 899 閱讀 1671

在abp.zero最近的一次更新中,有這樣的修改:

解釋的原因是:

在乙個不是非同步的方法中返回乙個task, 一般來說是沒有問題的,但是當這段**被using包裹時,using可能在task執行完成前就釋放。於是租戶id會被恢復為舊值,而不再是null,導致資料寫入資料庫時tenantid不對。

async task testasync() 

and

task testasync() 

前者類似於task.delay(1000).continuewith(() = {}),後者就是一般的 task.delay(1000)。

static async task testasync()

private void button1_click(object sender, eventargs e)

改成下面這種 non-async版本就不會死鎖了(但放棄了非同步)

static  task testasync()

或將上層方法也改為非同步(更好的方案)

private async void button1_click(object sender, eventargs e)

無論是ui context 還是 asp.net request context都不會和某個特定的執行緒繫結,但是在同一時間,只有乙個執行緒可以訪問它。

上層方法也改用非同步後,則所有等待都是非同步等待,上層方法也不會阻塞context

async await的一些記錄

1.await必須在async函式裡面引用 2.async函式必定返回乙個promise物件,但返回的內容可以是任意,如下面的測試,返回了內容為布林值的promise物件 3.正常情況下,await後面跟著乙個返回promise物件的函式 4.接收await 的變數 或常量 是promise物件 返...

微信小程式使用async await的一些技巧

在小程式onload事件中使用getitems this 和this.getitems getitems this 對應的方法為 this.getitems 對應的方法為 在getitems this 中使用await獲取的返回資料在除錯狀態是undefined,但是下面是能用的 在this.get...

MFC DLL的一些知識

雖然能用dll實現的東西都可以用com來實現,但dll的優點確實不少,它更容易建立。本文將討論如何利用mfc來建立不同型別的dll,以及如何使用他們。一 dll的不同型別 使用mfc可以生成兩種型別的dll mfc擴充套件dll和常規dll。常規dll有可以分為動態連線和靜態連線。visual c ...