使用 await 关键字实现对接口(由于模拟,远程处理或类似),并且具有返回任务<>的方法的接口:
interface IFoo
{
Task<BigInteger> CalculateFaculty(int value);
}
编译器出现错误:
'await'运算符只能在异步方法中使用。考虑使用'async'修饰符标记此方法并将其返回类型更改为'Task'
考虑到返回类型是“任务”,这有点不寻常。这个问题有点令人沮丧,迫使我“退回”使用延续风格或在这个界面周围提供一个额外的代理(因此几乎每个对我来说都不可行的界面)
有没有人对如何解决这个问题有个好主意?
答案 0 :(得分:30)
消息不是关于接口,而是关于调用方法。您需要使用await
修饰符标记包含async
关键字的方法:
public interface IFoo
{
Task<int> AwaitableMethod();
}
class Bar
{
static async Task AsyncMethod() // marked as async!
{
IFoo x;
await x.AwaitableMethod();
}
}
答案 1 :(得分:11)
这一定是好的:
interface IFoo
{
Task<BigInteger> CalculateFaculty(int value);
}
public class Foo: IFoo
{
public async Task<BigInteger> CalculateFaculty(int value)
{
var res = await AsyncCall();
return res;
}
}
用法:
public async Task DoSomething(IFoo foo)
{
var result = await foo.CalculateFaculty(123);
}
答案 2 :(得分:-1)
编译器消息不在接口上的用法上。它是对运行时遇到适当的await的任务的异步请求。
用法应该是方法实现,即。班级;接口使用情况与接口中的setter和getter相同。