非同步和輸出參數:一個困境
開發人員經常遇到需要編寫帶有輸出參數的非同步方法,但.NET 框架提出了在這方面是一個挑戰。
問題
以下程式碼片段說明了問題:
public async void Method1() { int op; int result = await GetDataTaskAsync(out op); }
此程式碼嘗試建立具有輸出參數的非同步方法,但此類功能在.NET 中不可用框架。
推理
根據盧西安Microsoft 工程師 Wischik 表示,這種限制源自於 CLR 中非同步方法的實作方式。它們被編譯器轉換為狀態機對象,而狀態機物件缺乏儲存輸出或引用參數位址的安全機制。
解決方法
常見的解決方法是讓非同步方法傳回一個元組:
public async Task Method1() { var tuple = await GetDataTaskAsync(); int op = tuple.Item1; int result = tuple.Item2; } public async Task<Tuple<int, int>> GetDataTaskAsync() { //... return new Tuple<int, int>(1, 2); }
這種方法提供了一種從非同步方法傳回多個值的方法,而無需求助於輸出參數。
以上是如何在 .NET 中將輸出參數與非同步方法一起使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!