lon*_*ero 3 .net abstract-class asynchronous c#-5.0
我有一个抽象类 MyAbstractDoerClass,它有一个名为DoItAsync 的抽象方法,如下所示:
public class MyAbtractDoerClass
{
public abstract Task DoItAsync();
}
Run Code Online (Sandbox Code Playgroud)
它还有一些派生类PainterClass和EraserClass:
public class PainterClass : MyAbtractDoerClass
{
public override async Task DoItAsync();
}
public class EraserClass : MyAbtractDoerClass
{
public override async Task DoItAsync();
}
Run Code Online (Sandbox Code Playgroud)
最后,有一个Factory方法返回这两个类中任何一个的实例.签名是这样的:
public MyAbstractClass Factory(string doerType)
Run Code Online (Sandbox Code Playgroud)
现在,我的代码如下所示:
var doer = Factory("painter");
await doer.DoItAsync(); // <--- here is the problem.
Run Code Online (Sandbox Code Playgroud)
鉴于MyAbstractClass.DoItAsync方法是一个抽象方法,它不能被标记为异步,因此我不能在API客户端中使用await关键字.这使我的API可用性看起来非常糟糕.我怀疑我的设计有些不对劲,有些概念我并不完全理解,但我不知道是什么.
我的代码出了什么问题?
更新
这是我在VS中遇到的错误:
这是抽象类中方法的签名:
你当然可以这样做:
await doer.DoItAsync();
Run Code Online (Sandbox Code Playgroud)
理解的关键是类型是等待的,而不是方法.你可以这样做await doer.DoItAsync(),因为DoItAsync回报Task,而不是因为DoItAsync是async.我在我的async介绍帖中解释了这一点.
换句话说,该代码与以下内容完全相同:
Task temp = doer.DoItAsync();
await temp;
Run Code Online (Sandbox Code Playgroud)
我的博客上有一个" asyncOOP"系列 ; 其中一个帖子涵盖async了继承方案.
| 归档时间: |
|
| 查看次数: |
841 次 |
| 最近记录: |