В Unity/C# запускает ли async/await .Net буквально другой поток?C#

Место общения программистов C#
Ответить
Anonymous
 В Unity/C# запускает ли async/await .Net буквально другой поток?

Сообщение Anonymous »

Важно для всех, кто исследует эту сложную тему особенно в Unity.

обязательно прочтите еще один вопрос, который я спросил, какие ключевые вопросы поднимаются:

В частности, в Unity, «куда» буквально возвращается ожидание?



Для экспертов C# Unity является однопоточным1

Вычисления обычно выполняются и тому подобное в другом потоке.

Когда вы делаете что-то в другом потоке, вы часто используете async/wait, поскольку все хорошие программисты C# говорят, что это простой способ сделай это!

Код: Выделить всё

void TankExplodes() {

ShowExplosion(); .. ordinary Unity thread
SoundEffects(); .. ordinary Unity thread
SendExplosionInfo(); .. it goes to another thread. let's use 'async/wait'
}

using System.Net.WebSockets;
async void SendExplosionInfo() {

cws = new ClientWebSocket();
try {
await cws.ConnectAsync(u, CancellationToken.None);
...
Scene.NewsFromServer("done!"); // class function to go back to main tread
}
catch (Exception e) { ... }
}
Хорошо, значит, когда вы это делаете, вы делаете все «так же, как обычно», когда запускаете поток более традиционным способом в Unity/C# (поэтому используйте Thread или что-то еще, или позвольте это сделать собственному плагину, или ОС, или в любом другом случае).

Все работает отлично.

Все работает отлично.

p>

Как отстойный программист Unity, который знает C# лишь настолько, чтобы дойти до конца дня, я всегда предполагал, что приведенный выше шаблон async/await буквально запускает другой поток.

Фактически, приведенный выше код буквально запускает другой поток или это делает C#/ .Net использует какой-то другой подход для решения задач, когда вы используете аккуратный шаблон async/wait?

Может быть, он работает иначе или конкретно в движке Unity, чем «использование C # в целом» ? (IDK?)

Обратите внимание, что в Unity то, является ли это потоком или нет, существенно влияет на то, как вам придется обрабатывать следующие шаги. Отсюда и вопрос.



Проблема: Я понимаю, что существует много дискуссий по поводу «ожидается». ветка", но (1) я никогда не видел, чтобы это обсуждалось/ответилось в настройках Unity (есть ли какая-то разница? ИДК?) (2) я просто никогда не видел четкого ответа!



1 Некоторые вспомогательные расчеты (например, физические и т. д.) выполняются на другие потоки, но фактический «игровой движок на основе фреймов» представляет собой один чистый поток. (Невозможно каким-либо образом «получить доступ» к основному потоку фрейма движка: при программировании, скажем, собственного плагина или некоторых вычислений в другом потоке вы просто оставляете маркеры и значения для компонентов в потоке фрейма движка, чтобы их можно было просмотреть и использовать при запуске каждого кадра.)

Подробнее здесь: https://stackoverflow.com/questions/554 ... her-thread
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»