MAUI: ограничения потоковой обработки Android и IOSC#

Место общения программистов C#
Ответить
Anonymous
 MAUI: ограничения потоковой обработки Android и IOS

Сообщение Anonymous »

У меня есть асинхронная функция, которая получает потоковые ответы от OpenAI и заполняет представление результатами. Благодаря этому функция обращается как к сети, так и к пользовательскому интерфейсу.
Если я вызываю функцию как await PromptAISubThread(text, token);
то Android получает расстроен, так как по умолчанию не разрешает сетевые подключения из основного потока. В итоге я получаю исключение android.os.NetworkOnMainThreadException`.
Решение состоит в том, чтобы вызвать функцию через Task.Run, чтобы запустить ее в отдельном потоке. Но затем IOS расстраивается, поскольку не позволяет получить доступ к пользовательскому интерфейсу из потока, отличного от (основного) потока пользовательского интерфейса, и выдает исключение UIKit.UIKitThreadAccessException.
Код приведенный ниже фрагмент естественным образом решает проблему, но я стараюсь, насколько это возможно, избегать условной компиляции. Есть ли лучший способ справиться с этой ситуацией?
#if IOS
await PromptAISubThread(text, token);
#else
await Task.Run(async () => await PromptAISubThread(text, token));
#endif

private async Task PromptAISubThread(string text, CancellationToken token)
{
AsyncCollectionResult chatStream;
await foreach (var completionUpdate in chatStream)
{
UpdateUI(completionUpdate);
}
}


Подробнее здесь: https://stackoverflow.com/questions/793 ... strictions
Ответить

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

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

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

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

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