静态代码如何与多个线程一起运行?

Kri*_*isc 13 .net c# multithreading

我正在使用静态和非静态方法从类中读取线程,我处于类似情况.

我有一个静态方法,从资源中提取数据并根据数据创建一些运行时对象.

static class Worker{
    public static MyObject DoWork(string filename){
        MyObject mo = new MyObject();

        // ... does some work

        return mo;
    }
}
Run Code Online (Sandbox Code Playgroud)

该方法需要一段时间(在这种情况下,它读取5-10mb文件)并返回一个对象.

我想采用这种方法并在多线程情况下使用它,这样我就可以一次读取多个文件.除了设计问题/指南,多个线程如何访问此代码?

假设我有类似的东西......

class ThreadedWorker {
    public void Run() {
        Thread t = new Thread(OnRun);
        t.Start();
    }

    void OnRun() {
        MyObject mo = Worker.DoWork("somefilename");

        mo.WriteToConsole();
    }
}
Run Code Online (Sandbox Code Playgroud)

是否为每个线程运行静态方法,允许并行执行?

Kev*_*ell 19

是的,该方法应该能够在多个线程中正常运行.您唯一需要担心的是同时访问多个线程中的同一文件.


Fre*_*örk 8

在这种情况下,您应该区分静态方法和静态字段.每次调用静态方法都有自己的方法及其局部变量的"副本".这意味着在您的示例中,每个调用都将在其自己的MyObject实例上运行,并且调用将彼此无关.这也意味着在不同的线程上执行它们没有问题.