gpt4 book ai didi

c# - 有没有办法同步运行异步 lambda?

转载 作者:太空狗 更新时间:2023-10-29 20:19:34 26 4
gpt4 key购买 nike

有没有办法同步运行异步 lambda?不允许修改 lambda 表达式,必须保持原样。

复制/粘贴示例(这是一个抽象):

var loopCnt = 1000000;

Action<List<int>> aslambda = async (l) =>
{
Thread.Sleep(100);
await Task.Run(() => { });
for (int i = 0; i < loopCnt; i++) { l.Add(i); }
};

var lst = new List<int>();
aslambda(lst); //This runs asynchronously
if (lst.Count < loopCnt-100) { ; }

解决方案:

接受一个答案对我来说真的是一个两难选择。我已经用 NuGet 包尝试了 Stephen Cleary 的解决方案 - 效果很好并且适用范围很广,但是 dvorn 对问题的回答(因为它是制定的 ;))是容易多了。

dvorn 是否更改了 lambda 的签名?否和是 ;)

来自 MSDN:

Note that lambda expressions in themselves do not have a type becausethe common type system has no intrinsic concept of "lambdaexpression." However, it is sometimes convenient to speak informallyof the "type" of a lambda expression. In these cases the type refersto the delegate type or Expression type to which the lambda expressionis converted.

因此,他们都收到 +1 并接受了 Stephen Cleary 的回答

最佳答案

Is there a way to run async [void] lambda synchronously?

是的,但像所有sync-over-async hacks ,这很危险,并且不适用于所有 lambda。

您必须有一个 custom SynchronizationContext to detect the completion of an async void method (或 lambda )。这很重要,但你可以使用我的 AsyncContext (在 NuGet 包 Nito.AsyncEx.Context 中可用):

AsyncContext.Run(() => aslambda(lst));

关于c# - 有没有办法同步运行异步 lambda?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43369832/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com