私は2つのタスクを並行して実行しており、ここにタスク情報があります。 タスク1 - 起動してアプリケーションを実行します タスク2 - アプリケーションの実行時間を監視します。 30分を超える場合は、タスク1アプリケーションの停止コマンドを発行して、両方のタスクを再開してください。C#で堅牢なスレッド監視を実装する方法は?
タスク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)'のようなものをチェックします。 –
ありがとうございます。しかし、私はタスク1のアプリケーションは状態を実行しているので、タスク2のステータスを検証することはできませんし、終了時に出てくるでしょう。 – IamRKY