首页 > 解决方案 > 无法等待转换的方法调用 - 语法错误

问题描述

我正在尝试 await SubscribeToKlineUpdatesAsync,它正在从IExchangeClientto投射BinanceSpotClient,但它不允许我这样做。出现以下错误消息:

当前上下文中不存在名称“等待”

这样做的正确语法是什么?

public class BinanceSpotClient : IExchangeClient
{
    ...

    public async Task<CallResult<UpdateSubscription>> SubscribeToKlineUpdatesAsync(string symbol, TimeFrame timeFrame, Action<IBinanceStreamKlineData> callback)
    {
        return await _socketClient.Spot.SubscribeToKlineUpdatesAsync(symbol, timeFrame.ToKlineInterval(), callback);
    }
}

public class LiveTradeManager : ITradeManager
{
    private static readonly ILog _logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);

    private readonly IExchangeClient _exchangeClient;
    private readonly TradeOptions _tradeOptions;

    public LiveTradeManager(IExchangeClient exchangeClient, TradeOptions tradeOptions)
    {
        _exchangeClient = exchangeClient;
        _tradeOptions = tradeOptions;
    }

    public void Run()
    {
        try
        {
            var strategy = StrategyUtils.GetStrategyByName("RsiStrategy");

            var result = await (_exchangeClient as BinanceSpotClient).SubscribeToKlineUpdatesAsync(_tradeOptions.Pair, strategy.TimeFrame, data => // the error appears here
            {

            });

            if (result.Success)
            {
                result.Data.ConnectionLost += () =>
                {
                    _logger.Error("Connection lost.");
                };

                result.Data.ConnectionRestored += (e) =>
                {
                    _logger.Info("Connection was restored.");
                };
            }
        }
        catch (Exception ex)
        {
            _logger.Error($"{ex.Message} | Stack trace: {ex.StackTrace}");
        }
    }
}

标签: c#

解决方案


将方法的签名更改Run为异步并返回 Task (很可能ITradeManager也需要更改):

public async Task Run()
{
    // you can use await here
}

推荐阅读