多线程C#任务完成器

时间:2018-08-10 07:14:53

标签: c# multithreading

我有一个程序需要连接到一定数量的SSH服务器。 [如果他们不忙],[应更改状态,如果正在执行的任务应更改为true,如果完成则应更改为false]。

并在该SSH上完成一些任务。 我有SSH列表,线程数组和任务列表。

在此阶段我需要做的所有事情。

-SSH =>(如果正在执行任务(IsBusy = true)。 -SSH =>(如果不执行任务或未完成(IsBusy = false)。 -if [IsBusy = false使用线程..应该承担一个完成任务的任务。 当服务器执行任务时,应将其从任务列表中删除,并且IsBusy也将为true。 -任务应该是异步的!。


    public static List<string> tasks = new List<string>();
    public static List<SSH> servers = new List<SSH>();

在Main.cs

        // Adding Poco Tasks
        for (int i = 0; i < 2000; i++)
        {
            tasks.Add(i.ToString());
        }
        // Adding Poco Servers           
        for (int i = 0; i < 20; i++)
        {
            servers.Add(new SSH() { Name = i.ToString(), IsBusy = false });
        }
        // My Threads Array
        Thread[] threads = new Thread[50];
        for (int i = 0; i < 50; i++)
        {
            var thread = new Thread(async () =>
            {
                await CompleteTask(tasks[0]);
            });
            threads[i] = thread;
        }
        // Just Renaming Threads
        for (int i = 0; i < 50; i++)
        {
            threads[i].Name = i.ToString();
            threads[i].Start();
        }

和任务

    static async Task CompleteTask(string task)
    {
        while (tasks.Count > 0)
        {
            lock (tasks)
            {
                Console.WriteLine("Current Thread is {0} ans Status is {1} Tasks id = {2} ", Thread.CurrentThread.Name, Thread.CurrentThread.IsAlive, task);
                tasks.Remove(task);
            }
        }
    }

我要寻找的结果

Current Thread is 1 ans Status is True Tasks id = 1
Current Thread is 2 ans Status is True Tasks id = 2
Current Thread is 3 ans Status is True Tasks id = 3
Current Thread is 1 ans Status is True Tasks id = 4
Current Thread is 4 ans Status is True Tasks id = 5
Current Thread is 5 ans Status is True Tasks id = 6
Current Thread is 2 ans Status is True Tasks id = 7

0 个答案:

没有答案