我有两个接口:
interface ICommandAsync : ICommand
{
new Task Run(params string[] args);
}
和
interface ICommand
{
string Name { get; }
string Desc { get; }
void Run(params string[] args);
}
'CommandWeather'没有实现接口成员'ICommand.Run(params string [])'。 'CommandWeather.Run(params string [])'无法实现'ICommand.Run(params string [])',因为它没有匹配的返回类型'void'。
这里是CommandWeather
,或者是令人反感的类:
class CommandWeather : ICommandAsync
{
public async Task Run(params string[] args)
{
//...
}
}
我的问题是:如何创建可选的异步接口?我需要这些方法具有相同的名称,因为它们都将用Run()
来调用,实际上ICommand
或ICommandAsync
的少数实现实际上需要使用async
。这意味着使用同步异步方法会获得绿线。
答案 0 :(得分:3)
明确实施其中至少一项。
class CommandWeather : ICommandAsync
{
public async Task Run(params string[] args)
{
//...
}
// Explicitly implement ICommand.Run
void ICommand.Run(params string[] args)
{
//...
}
}
这是必须执行的IEnumerator.Current
,因为IEnumerator<T>.Current
是用new
声明的,并且类型为T
,而不是object
。
@Johnny很好地指出,异步方法通常具有Async
后缀。那也可以解决问题。