Cancellation¶
TeleFlow передаёт cancellation через update pipeline. Handler methods могут принимать CancellationToken, а context helpers используют token текущего update, если ты не передал token явно.
Handler tokens¶
[Command("start")]
public Task Start(MessageContext ctx, CancellationToken ct)
{
return ctx.Message.AnswerAsync("Ready.", ct);
}
Используй token для I/O:
[Command("report")]
public async Task Report(MessageContext ctx, IReportService reports, CancellationToken ct)
{
var report = await reports.BuildAsync(ctx.Sender?.Id, ct);
await ctx.Message.AnswerAsync(report.Title, ct);
}
Context helpers¶
Message и callback helpers принимают optional cancellation tokens:
await ctx.Message.AnswerAsync("Saved.", ct);
await ctx.Callback.AnswerAsync(ct);
await ctx.Callback.EditTextAsync("Done.", ct);
Если token не передан, helpers берут token из current update context.
Прямые вызовы Bot API¶
Generated client methods тоже принимают cancellation tokens:
using TeleFlow.Telegram.Schema.Abstractions;
await ctx.Bot.SendMessageAsync(
chatId: IntegerString.From(ctx.TelegramChat.Id),
text: "Processing complete.",
cancellationToken: ct);
Рекомендуемое правило¶
Передавай CancellationToken в:
- database calls;
- HTTP calls;
- Telegram Bot API calls;
- storage calls;
- долгие CPU/background operations, если они поддерживают cancellation.
Для маленьких pure in-memory operations token можно не передавать, но обычно понятнее держать handler I/O consistently cancellable.