当使用await关键字并且具有返回Task <>的方法的接口实现针对接口(因为模拟,远程处理或类似)时:
interface IFoo
{
Task<BigInteger> CalculateFaculty(int value);
}
Run Code Online (Sandbox Code Playgroud)
编译器出现错误:
'await'运算符只能在异步方法中使用.考虑使用'async'修饰符标记此方法并将其返回类型更改为'Task'
考虑到返回类型是"任务",这有点不寻常.这个问题有点令人沮丧,并迫使我使用延续风格 "退回" 或在此界面周围提供额外的代理(因此对于几乎所有对我来说都不可行的界面)
有没有人对如何解决这个问题有个好主意?
我正在查看Roslyn ObjectPool实现(https://github.com/dotnet/roslyn/blob/master/src/Compilers/Core/SharedCollections/ObjectPool%601.cs),我不明白他们为什么不简单选择有一个T数组,而是将T包装在一个结构中?
[DebuggerDisplay("{Value,nq}")]
private struct Element
{
internal T Value;
}
...
private readonly Element[] _items;
Run Code Online (Sandbox Code Playgroud)
这样做的目的是什么?