在overriden </string>中使用task <string>方法

时间:2014-05-26 13:02:03

标签: c# asynchronous task-parallel-library

我想知道什么是调用在override方法中返回Task的方法的理想方法?

例如:

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";
}

这显然不可能,因为我将覆盖方法的返回值从字符串更改为任务字符串...

我该如何解决我的问题?

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

1 个答案:

答案 0 :(得分:1)

你可以这样做:

public override string DoSomething()
{
    //does something...
    base.DoSomething();

    return GetName().Result;
}

警告:这可能会导致死锁

请参阅Don't block on async code