gpt4 book ai didi

c# - 以下 Func> 异步委托(delegate)方法之间有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 17:27:39 26 4
gpt4 key购买 nike

如果我有以下方法:

public async Task<T> DoSomethingAsync<T>(Func<Task<T>> action)
{
// bunch of async code..then "await action()"
}

下面两种用法有什么区别:

public async Task MethodOneAsync()
{
return await DoSomethingAsync(async () => await SomeActionAsync());
}

public async Task MethodTwoAsync()
{
return await DoSomethingAsync(() => SomeActionAsync());
}

都可以编译,都可以工作,并且没有 C# 警告。

有什么区别(如果有的话)?如果调用者等待,这两种方法都会运行真正的异步吗?

最佳答案

两者在功能上没有区别。唯一的区别是如果 Task来自 SomeActionAsync 的直接返回或等待它。 Stephen Cleary has a good blog post about this ,并针对这个小案例推荐第二种方法。

第一种方法可用的原因是你可以有一个像这样的非平凡的 lambda 表达式:

public async Task MethodOneAsync()
{
return await DoSomethingAsync(async () => {
var i = _isItSunday ? 42 : 11;
var someResult = await SomeActionAsync(i);
return await AnotherActionAsync(someResult*i);
});
}

所以区别与具有此签名的方法之间的区别相同 public async Task<int> MyMethod还有这个public Task<int> MyMethod

关于c# - 以下 Func<Task<T>> 异步委托(delegate)方法之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40035427/

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