C#同时执行资源监视逻辑和其他任务

时间:2019-01-26 18:00:23

标签: c#

我正在开发一个程序,该程序将在具有最少的多任务处理能力和其他硬件资源的瘦客户机上运行。 我希望有两种方法可以连续运行,但不能保留程序的流程。在搜索过程中,我遇到了一些尝试解决类似概念的帖子,但是它们很古老,并且使用不同的编程语言,或者不能解决我的问题。

在我的程序中,我有一个文件系统监视程序,一个资源监视器方法以及一些其他方法。

当前,我的程序并行运行文件系统监视程序和ResourcesMonitor()方法,但是该程序没有获得过去的ResourcesMonitor()方法,因此ThirdMethod()和其他后续方法从不执行。

如何让我的程序运行ResourcesMonitor()并执行该方法下的其余方法?

class Program
{

    static void Main(string[] args)
    {
        // call the FSW
        var task = MyFileSystemWatcher(path);

        // call another method that works same way as file system watcher
        ResourcesMonitor();  

        // call another method
        ThirdMethod();

        // more methods
    }

    private void ResourcesMonitor()
    {

        // on a thin client with limited hardware resources

        using (an API)
        {
            // monitors...
        // if number of processes is higher than recommended, close some uncessary background processes
        // in the cases of resources overflow, write to log


            // to have the this method run infinitely
            System.Windows.Forms.Application.Run();
        }
    }

    private static void ThirdMethod()
    {
        // does something
    }

    private static async Task MyFileSystemWatcher(string path)
    {
        // file system watcher
    }

}

目前,我有两个这样的方法,但是以后可能会有更多具有相似逻辑的方法,我将不得不并行运行。

2 个答案:

答案 0 :(得分:1)

您可以使用Task完成此操作:

    // call another method that works same way as file system watcher
    var task1 = Task.Run(() => ResourcesMonitor());

    // call another method
    var task2 = Task.Run(() => ThirdMethod());


    Task.WaitAll(new { task1, task2 } );

答案 1 :(得分:0)

使用所需的方法创建新线程,可以选择将其作为背景并根据需要分配优先级(有多个)。