使用task< string>方法重写

本文关键字:方法 重写 string task 使用 | 更新日期: 2023-09-27 18:05:05

我想知道调用在重写方法中返回任务的方法的理想方法是什么?

例如:

public Task<string> GetName()
{
    return Task.Run(() => {
      return "Foo";
    });
}

在我的一个方法中,我只是简单地这样做:

public async Task<string> DoSomething()
{
    var res = await GetName();
    return res + " rocks";
}

但现在我面临的情况是,有一个方法声明如下:

public virtual string DoSomething()
{
  //does something...
}

在我的继承中,我需要重写这个方法并做一些事情并调用Task方法,所以我的第一个想法是这样做:

public override async Task<string> DoSomething()
{
    //does something...
    base.DoSomething();
    var res = await GetName();
    return res + " rocks";
}

这显然是不可能的,因为我改变了返回值从一个覆盖的方法从字符串到任务字符串…

我该如何解决我的问题?

(注意:我不能修改基类,因为它不是我的。这是一个外部库)

使用task< string>方法重写

你可以这样做:

public override string DoSomething()
{
    //does something...
    base.DoSomething();
    return GetName().Result;
}

警告:这会导致死锁

参见不要阻塞异步代码