Task多线程进行多进程

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ConsoleApp
{
class Program
{
[DllImport("Kernel32", EntryPoint = "GetCurrentThreadId", ExactSpelling = true)]
public static extern Int32 GetCurrentWin32ThreadID();
static void Main(string[] args)
{
int maxConnectionCount = 1;
string[] urlarr = File.ReadAllLines(@"D:\sitecheckurllist.txt");
int num = urlarr.Length;
var SiteCheck = new SiteCheck();
SiteCheck.Run(urlarr, num, maxConnectionCount);
}

}

public class SiteCheck
{

Random rand = new Random();
Queue<int> queueUrl = new Queue<int>();
int EachCount = 1;
int Cur = 0;

int LoadData(int Max)
{
if (Cur >= Max)
{
//when Cur>=Max,return
Console.WriteLine("Reached max value!");
return -1;
}
Console.WriteLine("Loading data...");
for (int i = Cur; i < EachCount + Cur; i++)
{
Thread.Sleep(10);
Console.Write(i + " ");
//insert data into Queue<Book>
queueUrl.Enqueue(i);
}
Console.WriteLine("");
Cur += EachCount;
Console.WriteLine("Data loaded successful,{0}...", queueUrl.Count);
return Cur;
}

public void Run(string[] urlarr, int Max, int maxConnectionCount)
{
int cur = LoadData(Max);

Process process = new Process();
Console.WriteLine("Tasks have started...");
do
{

if (cur == -1)
{
break;
}
else
{
cur = queueUrl.Count;
}
Task[] tasks = new Task[maxConnectionCount];
Stopwatch sw = new Stopwatch();
sw.Start();
LogHelper.WriteLog(typeof(Program), string.Format("StartTaskTime taskCount{0}:", maxConnectionCount) + DateTime.Now.ToString());
for (int i = 0; i < maxConnectionCount; i++)
{
process = new Process();

tasks[i] = Task.Factory.StartNew(()
=>
{
process.StartInfo.FileName = string.Format(@"D:\siteCheck\publish{0}\lphash.exe", i); //准备启动lphash
process.StartInfo.Arguments = urlarr[cur - maxConnectionCount + i];
process.Start();
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
});
Thread.Sleep(500);

}
process.WaitForExit();
sw.Stop();
LogHelper.WriteLog(typeof(Program), string.Format("endTaskTime taskCount{0}:", maxConnectionCount) + DateTime.Now.ToString());


cur =LoadData(Max);

} while (queueUrl.Count > 0);

//when Cur>=Max,break the while loop
Console.WriteLine("All tasks have completed.");

Console.ReadKey();
}
}
}

  

posted @ 2017-09-01 16:41  公众号python学习开发  阅读(243)  评论(0编辑  收藏  举报