У меня есть следующий код:
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();
Насколько я понимаю, этот код создаст 2 новых потока, запустит указанные методы, приостановит основной поток, пока оба эти потока не завершат, а затем продолжит выполнение.
Предполагая, что я говорю правильно, пока все хорошо.
Далее я хочу попробовать это:
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();
По сути, добавление асинхронного режима и ожидание в каждом потоке.
Компилятор принимает это изменение и, кажется, работает локально, но в порядке ли этот код, и может ли он вызвать какие-либо проблемы в дальнейшем, например, перепутаются ли потоки, не будут ждать, перепутать результаты и т.д.
У меня достаточно хорошее понимание асинхронности и базовое понимание многопоточности, и я не могу придумать ни одной причины, по которой это не сработает.
Код выполняется локально, но меня беспокоит то, что при большой нагрузке на сервер могут появляться проблемы, которых не было в локальной версии ....