我有一个类似于this question的问题,但不同之处在于我要处理异步函数。
所以正如问题所述,我想将一个方法存储在一个变量中(稍后再调用)
对于同步功能
private delegate void eventmethod(); //(for a function without arguments and return void)
private eventmethod MySavedEvent;
void D()
{
}
MySavedEvent = D;
MySavedEvent();
但是如果函数实际上是会发生什么
Task<returnType> D();
如何在此定义委托?
答案 0 :(得分:0)
基于任务的函数只是返回任务的方法。
Action
用于返回void。
Func
用于返回内容。
签名为Task DoSomething()
的方法可以表示为Func<Task>
,因为它返回了Task
。
示例:
void Main()
{
Execute().Wait();
}
private static async Task Execute()
{
Console.WriteLine(DateTime.Now);
await myFunc();
Console.WriteLine(DateTime.Now);
}
private static Func<Task> myFunc = async () => await Task.Delay(2000);
编辑:
显然,问题在于任务中的返回类型。
没有区别;是Task
,Task<T>
,List<T>
还是Task<List<T>>
。这些是通用类型,但仍然只是一种返回类型。
示例2:
void Main()
{
Execute().Wait();
}
private static async Task Execute()
{
Console.WriteLine(DateTime.Now);
Console.WriteLine(await myFunc());
Console.WriteLine(await myFunc());
}
private static Func<Task<DateTime>> myFunc = async () =>
{
await Task.Delay(2000);
return DateTime.Now;
};