【发布时间】:2015-10-11 23:58:23
【问题描述】:
我有一个基本的单例类,但单例有一个异步方法,如下所示:
public sealed class AddInHandler
{
private static readonly AddInHandler instance = new AddInHandler();
static AddInHandler()
{
}
AddInHandler()
{
}
public static AddInHandler Instance
{
get { return instance.Value; }
}
public async Task<AvailableActions> GetAvailableActions(string carrierMnemonic)
{
// some code that uses await...
}
}
如果我尝试通过单例使用异步方法,例如:
public async Task<Collection<CarrierInformation>> RetrieveAvailableCarriersAsync()
{
// some await code here
await Task.Run(() =>
{
// ...
var availableActions = await AddInHandler.Instance.GetAvailableActions(addIn.Name);
}
}
然后我遇到了错误。
“await”运算符只能在异步 lambda 中使用 表达。考虑用“异步”标记这个 lambda 表达式 修饰符。
我期待这是因为 Instance 属性不是异步的,所以我遇到了这个问题?这是否正确,是否有推荐的最佳方法来解决此问题?
【问题讨论】:
-
请显示您的通话的完整上下文。您只能在异步函数中使用
await- 异步方法或异步 lambda 表达式。我强烈怀疑这就是问题所在。 -
我认为它在抱怨包装此代码的方法 var availableActions = await AddInHandler.Instance.GetAvailableActions(addIn.Name);。该方法需要标记为异步
标签: c# asynchronous singleton async-await task-parallel-library