Я хотел бы вызвать высокопроизводительный метод dowork на отдельной нити и убить его, если он занимает больше 3 секунд. Есть ли какие-либо проблемы со следующим кодом?Вопрос многопоточности
class Class1
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main(string[] args)
{
Console.WriteLine("starting new thread");
Thread t = new Thread(new ThreadStart(dowork));
t.Start();
DateTime start = DateTime.Now;
TimeSpan span = DateTime.Now.Subtract(start);
bool wait = true;
while (wait == true)
{
if (span.Seconds > 3)
{
t.Abort();
wait = false;
}
span = DateTime.Now.Subtract(start);
}
Console.WriteLine("ending new thread after seconds = {0}", span.Seconds);
Console.WriteLine("all done");
Console.ReadLine();
}
static void dowork()
{
Console.WriteLine("doing heavy work inside hello");
Thread.Sleep(7000);
Console.WriteLine("*** finished**** doing heavy work inside hello");
}
}
Я забыл об использовании соединения с таймаутом в целом. Это лучше, чем мой «Сон», потому что он будет продолжаться через менее 3 секунд, если операция завершится раньше этого. –