gpt4 book ai didi

c# - 如果收到新请求,如何取消以前的任务?

转载 作者:行者123 更新时间:2023-11-30 19:57:10 24 4
gpt4 key购买 nike

我会尽量简化我的情况,使之更加简洁明了。所以,我正在开发一个 WinRT 应用程序,用户在 TextBox 中输入文本,并在 2 秒后在其 TextChanged 事件中输入文本我需要发出远程请求以根据用户文本获取数据。

现在用户输入文本并且 Web 请求已初始化,但用户立即写入另一个术语。因此,我需要取消第一个 Web 请求并触发新请求。

将以下代码视为我的代码:

private CancellationTokenSource cts;

public HomePageViewModel()
{
cts = new CancellationTokenSource();
}

private async void SearchPeopleTextChangedHandler(SearchPeopleTextChangedEventArgs e)
{
//Cancel previous request before making new one

//GetMembers() is using simple HttpClient to PostAsync() and get response
var members = await _myService.GetMembers(someId, cts.Token);

//other stuff based on members
}

我知道 CancellationToken 在这里发挥了作用,但我就是不知道它是如何发挥作用的。

最佳答案

你已经差不多明白了。核心思想是单个CancellationTokenSource只能被取消一次,因此必须为每个操作创建一个新的。

private CancellationTokenSource cts;

private async void SearchPeopleTextChangedHandler(SearchPeopleTextChangedEventArgs e)
{
// If there's a previous request, cancel it.
if (cts != null)
cts.Cancel();

// Create a CTS for this request.
cts = new CancellationTokenSource();

try
{
var members = await _myService.GetMembers(someId, cts.Token);

//other stuff based on members
}
catch (OperationCanceledException)
{
// This happens if this operation was cancelled.
}
}

关于c# - 如果收到新请求,如何取消以前的任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31205165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com