Как убить зависший поток? - C#
Формулировка задачи:
В методе который запускается в потоке есть участок кода где посылаются запросы через прокси, на этом участке поток может бесконечно зависнуть. Убить его с помощью Thread.Abort() не получается. Уже замучился перезапускать программу, хочется как-то уже решить эту проблему.
Решение задачи: «Как убить зависший поток?»
textual
Листинг программы
- namespace ConsoleApplication293
- {
- using System;
- using System.Net;
- using System.Net.Http;
- using System.Text;
- using System.Threading;
- using System.Threading.Tasks;
- internal class Program
- {
- private static void Main()
- {
- var listener = new HttpListener();
- listener.Prefixes.Add("http://localhost:7777/");
- listener.Start();
- ProcessAsync(listener);
- try
- {
- var cts = new CancellationTokenSource(TimeSpan.FromSeconds(5));
- var awaiter = MainAsync(cts.Token).GetAwaiter();
- awaiter.GetResult();
- }
- catch (OperationCanceledException e)
- {
- Console.WriteLine(e.Message);
- }
- Console.ReadKey();
- }
- private static async Task MainAsync(CancellationToken token)
- {
- using (var client = new HttpClient())
- {
- var content =
- await client.GetAsync("http://localhost:7777/", HttpCompletionOption.ResponseContentRead, token);
- Console.WriteLine(await content.Content.ReadAsStringAsync());
- }
- }
- private static async void ProcessAsync(HttpListener listener)
- {
- while (true)
- {
- var context = await listener.GetContextAsync();
- await HandleRequestAsync(context);
- }
- }
- private static async Task HandleRequestAsync(HttpListenerContext context)
- {
- // FOR SLOW
- await Task.Delay(TimeSpan.FromSeconds(10));
- var response = context.Response;
- var responseString = "<HTML><BODY> TEST!</BODY></HTML>";
- var buffer = Encoding.UTF8.GetBytes(responseString);
- response.ContentLength64 = buffer.Length;
- using (var output = response.OutputStream)
- {
- output.Write(buffer, 0, buffer.Length);
- }
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д