将异步函数存储为变量
我有一个类似于这个问题的问题,但不同之处在于我在处理异步函数。
所以问题说我想在变量中存储一个方法(以后再调用它)
在syncrhonous函数的情况下
private delegate void eventmethod(); //(for a function without arguments and return void) private eventmethod MySavedEvent; void D() { } MySavedEvent = D; MySavedEvent();
但是如果该function实际上会发生什么
Task D();
如何在那里定义代理?
基于任务的函数只是一个返回任务的方法。 Action
用于返回void。 Func
用于返回某些内容。 具有签名Task DoSomething()
方法可以表示为Func
,因为它返回Task
。
例:
void Main() { Execute().Wait(); } private static async Task Execute() { Console.WriteLine(DateTime.Now); await myFunc(); Console.WriteLine(DateTime.Now); } private static Func myFunc = async () => await Task.Delay(2000);
编辑:
显然问题是关于任务中的返回类型。 没有区别; 无论是Task
, Task
, List
还是Task
。 这些是generics类型,但仍然只是一种返回类型。 >
例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> myFunc = async () => { await Task.Delay(2000); return DateTime.Now; };