[英]What's the right way to implement ValueTaskSource.SetCompleted
所以我們有這個 class 實現IValueTaskSource這個代碼不能寫成異步等待,因為沒有什么可以等待的。 我們向另一個正在運行的線程發送一條消息並取回一個 ValueTask,調用者可以等待該 ValueTask 以獲取另一個線程已完成處理該消息的通知。 然而,另一個線程是預先存在的並且已 ...
[英]What's the right way to implement ValueTaskSource.SetCompleted
所以我們有這個 class 實現IValueTaskSource這個代碼不能寫成異步等待,因為沒有什么可以等待的。 我們向另一個正在運行的線程發送一條消息並取回一個 ValueTask,調用者可以等待該 ValueTask 以獲取另一個線程已完成處理該消息的通知。 然而,另一個線程是預先存在的並且已 ...
[英]Upgraded EF Core to 3.1 and got compilation error for Task.WhenAll
在我們的項目中,我們使用了 EF Core 2.2.6。 但是升級到 EF Core 3.1 后,下面這段代碼停止編譯並報錯 錯誤 CS1503 參數 1:無法從 'System.Threading.Tasks.ValueTask' 轉換為 'System.Threading.Tasks.Task' ...
[英]How to Pause/Resume an asynchronous worker, without incurring memory allocation overhead?
我有一個包含無限while循環的異步方法。 這個循環被程序的主線程頻繁地暫停和恢復。 為此,我目前正在使用Nito.AsyncEx包中的PauseTokenSource類: 這工作得很好,但我注意到每次暫停和恢復PauseTokenSource時都會分配大約 100 個字節。 由於這種情況每秒發 ...
[英]Parallel.ForEachAsync Task vs ValueTask
我正在嘗試Parallel.ForEachAsync並且編譯器很友好地告訴我 body 是一個返回ValueTask的函數,而不是Task 。 快速搜索只產生了使用帶有多個語句的 lambda 的 ForEachAsync 示例: async (x, ct) => { ...; await ...
[英]ValueTask instances should not have their result directly accessed unless the instance has already completed
有一個返回ValueTask的庫,我有一個正在使用 ValueTask 的同步方法。 問題是有以下警告: CA2012:除非實例已經完成,否則不應直接訪問 ValueTask 實例的結果。 與任務不同,在操作完成之前,不能保證在 ValueTask 上調用 Result 或 GetAwaiter( ...
[英]Why is Task<T> faster than ValueTask<T>?
我正在對Task<T>和ValueTask<T>進行基准測試。 源代碼如下: #LINQPad optimize+ // Enable compiler optimizations void Main() { Util.AutoScrollResults = ...
[英]Do I need to query the .Result property of a ValueTask that I choose to not await?
假設我有一個返回類型ValueTask的 object 的方法,例如ChannelReader上的WaitToReadAsync方法。 我可以通過三種方式使用此ValueTask 。 我可以: 直接等着吧。 把它變成一個任務,然后等待它(用.AsTask() ) 查詢.Result屬性是否已同步完 ...
[英]What is the point of ValueTask.Preserve()?
ValueTask和ValueTask<TResult>有一個Preserve()方法,概括為“獲取一個可以在未來任何時候使用的 ValueTask”。 那是什么意思,我們什么時候應該使用它? 這是否意味着“在未來的任何時候”都不能使用“正常”的ValueTask ? 如果是這樣,為 ...
[英]How to return a canceled ValueTask<T> that propagates an OperationCanceledException, without async/await?
我正在編寫具有ValueTask<T>返回類型並接受CancellationToken的 API 。 如果CancellationToken在調用該方法時已經被取消,我想返回一個取消的ValueTask<T> ( IsCanceled == true ),它在等待時傳播一個 ...
[英]ValueTask method with unavoidable async await calls?
我目前有以下異步方法: 如果上面的代碼是熱路徑並且調用了很多次,更改為使用ValueTask是否安全/可以? 我不確定的是sslim.WaitAsync鎖定調用,它總是會導致代碼路徑永遠不會完全同步(即使_someObject已經初始化),這與將ValueTask用於可能同步執行的路徑相反嗎? 另 ...
[英]Will ValueTask still be beneficial if it depends on a method that returns Task?
以以下方法為例:public async ValueTask<int> MyMethod() { return await GetMyIntegerWithTask(); } public async Task<int> GetMyIntegerWithTask( ...
[英]Awaiting a single .NET event with a ValueTask
我有一個簡單的ITimer界面,它只有一個經典的Elapsed .NET 事件,該事件在特定時間跨度后引發。interface ITimer { void Start(TimeSpan interval); void Stop(); public event EventHan ...
[英]ValueTask for synchronous method
我正在使用並發字典實現一個簡單的查找服務來存儲數據。 由於使用此服務的大多數方法都是異步的,因此我正在考慮使用ValueTask<TResult>公開查找函數。 偽代碼: 這種方法是否有意義,是否有任何警告? ...
[英]Is it necessary to check `ValueTask.IsCompleted` for performance?
情況1: 案例2: 對於上面的case 1和case 2 , 誰能說case 2的性能(cpu、內存等)更好? 或者, task.IsCompleted只是重復和冗余? ...
[英]Is there a ContinueWith for ValueTask?
如果 API 返回ValueTask或ValueTask<T> ,有沒有辦法對其執行ContinueWith ,就像我可以使用Task一樣? 是否有 Microsoft 提供的 NuGet 庫與 .NET 標准 2.0 一起使用? ...
[英]Convert a ValueTask<T> to a non generic ValueTask
這里提出的問題與此處的問題相同,旨在為其創建一個明確的解決方案。 最准確的答案是 Stephen Toub 本人在本期中正是關於這個問題的。 “推薦代碼”如下:public static ValueTask AsValueTask<T>(this ValueTask<T> ...
[英]What is the ValueTask equivalent of Task.CompletedTask?
我正在實現IAsyncDisposable ,它要求我返回一個ValueTask ,但有時我的 dispose 方法無關。 在這種情況下我應該如何返回? 目前我正在返回new ValueTask(Task.CompletedTask) ,它似乎有效,但由於 valueTasks 的目的是避免創建不 ...
[英]Is there any sense to return ValueTask from method that internally awaits some Tasks
我有一個大致如下所示的異步方法: 由於數據已經准備好,此方法將在大部分時間同步工作。 因此,用 ValueTask 替換返回類型以減少分配看起來是個好主意。 但這調用reader.ReadInt32()返回任務。 所以問題是:從內部等待某些任務的方法返回 ValueTask 是否有意義? ...
[英]How to choose the return type of an async delegate
我將一個異步委托傳遞給 LINQ Select方法,我更喜歡獲取ValueTask列表而不是Task列表。 我該怎么做? 例子: 結果類型:System.Threading.Tasks.Task[] 這是不可取的。 我發現我可以通過用異步方法替換異步委托來創建我想要的列表,如下所示: ...
[英]The ValueTask<TResult> and the async state machine
根據文檔, ValueTask<TResult> ... 提供包裝Task<TResult>和TResult的值類型,僅使用其中一個。 我的問題是關於 C# 編譯器在遇到async關鍵字時生成的狀態機。 是不是足夠聰明,以產生ValueTask<TResult ...