C# Запуск asyn c Задача без блокировки - PullRequest
0 голосов
/ 29 апреля 2020

Как запустить asyn c Задачу, не блокируя другие задачи?

У меня есть одна функция, которая выполняет итерации, хотя List, но проблема в том, что при вызове функции другие функции не будут работать снова, пока первая функция выполнена. Как сделать функцию HandleAsyn c неблокируемой?

   public static async Task HandleAsync(Message message, TelegramBotClient bot)
    {
        await Search(message, bot); // This should be handled without working other possible functions. I have a function similar to this but which doesn't iterate though any list.
    }

private static async Task Search(Message message, TelegramBotClient bot)
{
    var textSplit = message.Text.Split(new[] {' '}, 2);

    if (textSplit.Length == 1)
    {
        await bot.SendTextMessageAsync(message.From.Id, "Failed to fetch sales. Missing game name. ",
            ParseMode.Html);
    }
    else
    {
        var search = await Program.itad.SearchGameAsync(textSplit[1], limit: 10, cts: Program.Cts);

        if (search.Data != null)
        {
            var builder = new StringBuilder();
            foreach (var deal in search.Data.List)
            {
                var title = deal.Title;
                var plain = deal.Plain;
                var shop = deal.Shop != null ? deal.Shop.Name : "N/A";
                var urls = deal.Urls;

                var priceNew = deal.PriceNew;
                var priceOld = deal.PriceOld;
                var priceCut = deal.PriceCut;

                builder.AppendLine($"<b>Title:</b> {title}");
                builder.AppendLine($"<b>Shop:</b> {shop}");
                builder.AppendLine();
                builder.AppendLine($"<b>Price:</b> <strike>{priceOld}€</strike> | {priceNew}€ (-{priceCut}%)");

                var buttons = new[]
                {
                    new[]
                    {
                        InlineKeyboardButton.WithUrl("Buy", urls.Buy.AbsoluteUri),
                        InlineKeyboardButton.WithUrl("History",
                            urls.Game.AbsoluteUri.Replace("info", "history"))
                    }
                };

                var keyboard = new InlineKeyboardMarkup(buttons);

                var info = await Program.itad.GetInfoAsync(plain, cts: Program.Cts);
                var image = info.Data.GameInfo.Image;

                if (image == null) image = new Uri("https://i.imgur.com/J7zLBLg.png");

                await TelegramBot.Bot.SendPhotoAsync(message.From.Id, new InputOnlineFile(image.AbsoluteUri),
                    builder.ToString(), ParseMode.Html, replyMarkup: keyboard,
                    cancellationToken: Program.Cts.Token);
                builder.Clear();
            }
        }
        else
        {
            await bot.SendTextMessageAsync(message.From.Id, "Failed to fetch sales. Game not found. ",
                ParseMode.Html);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...