Alw*_*wyn 4 c# asynchronous task c#-5.0 asp.net-4.5
这不会抛出编译错误,但为什么呢?
public async void DoSomething(object arg){ ... }
Action<object> myAnonActionDelegate = DoSomething;
Run Code Online (Sandbox Code Playgroud)
不应该" DoSomething"有一个类型的签名Func<object,Task>而不是Action?事实上," DoSomething"不能转让给Func<object,Task>代表.
问题是为什么?我对async关键字的了解是什么?
难道"DoSomething"不具有类型的签名
Func<object,Task>而不是Action吗?
不 - 该方法不返回任何内容.看看声明 - 它void不是Task.这async部分只是为了编译器的好处(以及人类阅读它) - 它并不是该方法签名的一部分.异步方法必须返回void,Task或者Task<T>-但该方法的返回类型真的是只是声明它是.编译器不会让你void变得Task神奇.
现在你可以编写完全相同的方法体并将方法声明为:
public async Task DoSomething(object arg){ ... }
Run Code Online (Sandbox Code Playgroud)
此时您将需要使用Func<object, Task>-但是这是一个不同的方法声明.
我强烈建议您使用返回表单,Task 除非您使用异步方法订阅事件 - 您也可以允许调用者观察您的方法的进度,失败等.
| 归档时间: |
|
| 查看次数: |
2352 次 |
| 最近记录: |