【发布时间】:2023-03-16 04:42:01
【问题描述】:
我写了如下方法:
async Task<T> Load<T>(Func<T> function)
{
T result = await Task.Factory.StartNew(() =>
{
IsLoading = true;
T functionResult = function.Invoke();
IsLoading = false;
return functionResult;
});
return result;
}
我有两个问题:
-
我可以简化代码吗?
-
我可以将任何 无参数 方法/函数传递给此方法以获得任何类型的返回类型。例如:
string GetString()通过说:
string someString = await Load(GetString);有没有一种方法可以使这个方法更通用,以便我可以传递带有参数的方法 好吧?例如。一种也可以接受的方法:
string GetString(string someString) string GetString(string someString, int someInt)这可能看起来像:
string someString = await Load(GetString("string")); string someString = await Load(GetString("string", 1));这显然行不通,但是由于
Load<T>方法没有引用参数,我觉得 这应该是可能的。
【问题讨论】:
-
IsLoading的目的是什么? -
您通常不需要
.Invoke()代表。你可以简单地T functionResult = function()。 There is no difference 在生成的代码中,但我倾向于将.Invoke()与基于反射的动态调用相关联。 -
你确定你甚至需要问题2吗?
await Load(() => GetString("string"))应该可以正常工作。 -
@RobertHarvey
IsLoading是我在 WPF 中用于绑定的属性 - 此方法是名为LoadingViewModel的基类的一部分。
标签: c# generics async-await task func