【发布时间】:2016-05-02 17:00:30
【问题描述】:
我有 2 个任务并行运行,这里是任务信息。 任务 1 - 启动并运行应用程序 任务 2 - 监控应用程序运行持续时间。如果超过 30 分钟,发出任务 1 应用程序的停止命令并重新启动两个任务。
任务 1 应用程序在较长时间运行期间有点重且容易发生内存泄漏。
我正在请求,我们如何针对这种情况实施强大的线程解决方案。
using QuickTest;
using System;
using System.Threading;
using System.Threading.Tasks;
namespace TaskParallelExample
{
internal class Program
{
private static void Main(string[] args)
{
Parallel.Invoke(RunApplication, MonitorApplication);
}
private static void RunApplication()
{
Application uftInstance = new Application();
uftInstance.Launch();
QuickTest.Test uftTestInstance = uftInstance.Test;
uftInstance.Open(@"C:\Tasks\Test1");
uftInstance.Test.Run(); // It will may run more then 30 mins or less then also. It it exceeds 30 mins which is calculated from Monitor Application.
}
private static void MonitorApplication()
{
Application uftInstance = new Application();
try
{
DateTime uftTestRunMonitor = DateTime.Now;
int runningTime = (DateTime.Now - uftTestRunMonitor).Minutes;
while (runningTime <= 30)
{
Thread.Sleep(5000);
runningTime = (DateTime.Now - uftTestRunMonitor).Minutes;
if (!uftInstance.Test.IsRunning)
{
break;
}
}
}
catch (Exception exception)
{
//To-do
}
finally
{
if (uftInstance.Test.IsRunning)
{
//Assume it is still running and it is more then 30 mins
uftInstance.Test.Stop();
uftInstance.Test.Close();
uftInstance.Quit();
}
}
}
}
}
谢谢, 拉姆
【问题讨论】:
-
我会使用取消令牌。任务 2 可以设置
token.Cancel();并且任务 1 正在检查if (token.IsCancelled)是否像这样。 -
谢谢。但是我无法验证任务 2 的状态,因为任务 1 应用程序将处于运行状态,并且会在它结束时出来。
标签: c# multithreading