使用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";
}
这显然是不可能的,因为我改变了返回值从一个覆盖的方法从字符串到任务字符串…
我该如何解决我的问题?
(注意:我不能修改基类,因为它不是我的。这是一个外部库)你可以这样做:
public override string DoSomething()
{
//does something...
base.DoSomething();
return GetName().Result;
}
警告:这会导致死锁
参见不要阻塞异步代码