У меня одновременно работают два приложения на C #.Одним из них является консольное приложение C #, которое отправляет вызовы REST другому, а другое работает на собственном сервере отдыха Нэнси.
Вот действительно базовое представление некоторых кодов обеих частей.
RestsharpClient:
public async void PostAsyncWhile()
{
IRestClient RestsharpClient = new RestClient("http://localhost:50001");
var request = new RestRequest($"/nancyserver/whileasync", Method.POST);
var asyncHandle = RestsharpClient.ExecuteAsync(request, response =>
{
Console.WriteLine(response.Content.ToString());
});
await Task.Delay(1000);
asyncHandle.Abort();//PROBLEM
}
NancyRestServer:
public class RestModule : NancyModule
{
public RestModule() : base("/nancyserver")
{
Post("/whileasync", async (args, ctx) => await WhileAsync(args, ctx));
}
private async Task<bool> WhileAsync(dynamic args, CancellationToken ctx)
{
do
{
await Task.Delay(100);
if (ctx.IsCancellationRequested)//PROBLEM
{
break;
}
}
while (true);
return true;
}
}
Клиент отправляет команду на запуск цикла while на сервере, ожидает 1 с и прерывает асинхронный вызов.
Проблема, с которой я столкнулся, заключается в том, что asyncHandle.Abort();
, по-видимому, не вызывает ctx.IsCancellationRequested
на стороне сервера.
Как мне отменить / прервать асинхронный вызов прихост-сервер nancy, использующий клиент restsharp?