C#-接口的可选异步

时间:2019-04-03 21:45:49

标签: c# asynchronous interface

我有两个接口:

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()来调用,实际上ICommandICommandAsync的少数实现实际上需要使用async。这意味着使用同步异步方法会获得绿线。

1 个答案:

答案 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后缀。那也可以解决问题。