myObject object1 = null;
Thread obj1Thread = new Thread(() => { object1 = _myService.GetMethod(variable1, variable2); });
obj1Thread.Start();
obj1Thread.Join();
myObject object2 = null;
Thread obj2Thread = new Thread(() => { object2 = _myService.GetMethod2(variable3, variable4); });
obj2Thread.Start();
obj2Thread.Join();
据我所知,这段代码将创建两个新线程,运行指定的方法,暂停主线程直到这两个线程完成,然后继续执行。
假设我的说法是正确的,到目前为止一切都很好。
接下来我想试试这个:
myObject object1 = null;
Thread obj1Thread = new Thread(async () => { object1 = await _myService.GetMethod(variable1, variable2); });
obj1Thread.Start();
obj1Thread.Join();
myObject object2 = null;
Thread obj2Thread = new Thread(async () => { object2 = await _myService.GetMethod2(variable3, variable4); });
obj2Thread.Start();
obj2Thread.Join();
基本上是为每个线程添加异步和等待。
编译器接受这个更改,它在本地运行似乎没有问题,但是这段代码是否正确?它是否可能在后面的过程中引起任何问题?例如,线程会混淆、无法等待、混淆结果等。
我对异步有相当好的理解,对多线程有基本的了解,我想不出为什么这不会起作用。
代码在本地运行,但我担心在服务器负载较重时会出现在本地版本中不存在的问题...
GetMethod
调用并且没有涉及线程的行为完全相同。 - Damien_The_Unbeliever