async await 模式下的lock邏輯

2021-10-11 05:03:02 字數 964 閱讀 7182

但高效能程式中lock邏輯大量存在,這裡使用dispose介面支援的using邏輯,實現乙個替代的lock邏輯:

public class nametasklock

}public class namelock : idisposable

internal void resetkey(string name)

public namelock(string ask)

public bool isreleased()

public void dispose()

}public readonly static int maxwaitsecond = 10;//最大等待時間。超過該時間,會丟擲異常。

public readonly static int maxlockinmemery = 10000;//locked中最大的儲存個數,超過該個數,會清理已銷毀的namelock項。

dictionarylocked = new dictionary();

namelock setlock(string name)

else

return null;

}else}}

void clearlock()}}

public async taskgetlock(string name,int second = -1)}}

使用方法:

using(var lkobj = await svr.nametasklock.current.getlock("my test key info"))

在using區間內相同名稱的任務會互斥。 代價是每100毫秒檢查一次其他任務是否完成。

問題:1:如果使用 using(var lkobj = svr.nametasklock.current.getlock("my test key info")) 編譯不會報錯。 但如果發生互斥,將會有異常發生。

2:不能巢狀! 巢狀使用必然會發生超時異常。

async await使用的要點

async await的使用 1 如果乙個方法標註了async,則其返回值只能是 void,task,task三者之一 2 如果非同步方法中沒有await,那麼這個方法將會以同步方式執行 3 單個async方法中可以擁有多個await 4 當遇到await表示式時,呼叫執行緒將會掛起,知道await...

async await搭配promise的使用

注意 使用async await,搭配promise,可以通過編寫形似同步的 來處理非同步流程,提高 的簡潔性和可讀性.本文介紹async await的基本用法和一些注意事項.引用mdn的介紹 await 操作符用於等待乙個 promise 物件,它只能在非同步函式 async function 內...

async await的基礎用法

async關鍵字 1 表明程式裡面可能有非同步過程 async關鍵字表明程式裡面可能有非同步過程,裡面可以有await關鍵字 當然全部是同步 也沒關係,但是這樣async關鍵字就顯得多餘了 2 非阻塞 async函式裡面如果有非同步過程會等待,但是async函式本身會馬上返回,不會阻塞當前執行緒,可...