Member 14154181 Ответов: 1

Может ли кто-нибудь объяснить мне это самым подробным образом


теперь я понимаю что это асинхронная задача я уже использовал базовую асинхронную задачу раньше для выполнения простой задачи но
то, что я пытаюсь сделать, - это понять тип возвращаемого значения и то, как реализовать его в коде c#
я прочитал около дюжины статей об объяснении асинхронной задачи и интерфейсов, которые я просто не могу понять.

Task<IGuildUser> AddGuildUserAsync(ulong userId, string accessToken, Action<AddGuildUserProperties> func = null, RequestOptions options = null)



*документация
хттпс://документы.stillu.куб. см/по API/розни.IGuild.html#Discord_IGuild_AddGuildUserAsync_System_UInt64_System_String_System_Action_Discord_AddGuildUserProperties__Discord_RequestOptions_

Что я уже пробовал:

попробовал discord API за помощью.
читайте и смотрите видео, касающиеся асинхронной задачи и интерфейса, но не могу обмозговать это

1 Ответов

Рейтинг:
1

Wastedtalent

Метод с сигнатурой:

Task<iguilduser> AddGuildUserAsync(ulong userId, string accessToken, Action<addguilduserproperties> func = null, RequestOptions options = null)


Имеет возвращаемый тип: Task<iguilduser>, с реализацией IGuildUser, обернутой внутри объекта Task.

Я предполагаю, что вы хотите получить IGuildUser, поэтому у вас есть 3 варианта:

IGuildUser user = AddGuildUserAsync(ulong userId, string accessToken, Action<addguilduserproperties> func = null, RequestOptions options = null).Result;


Это будет работать синхронно, и на самом деле это не то, для чего нужна асинхронность.

В качестве альтернативы вы "ждете" ментода, который эффективно делает то же самое, но будет работать асинхронно и может быть выполнен только внутри другого асинхронного метода:

IGuildUser user = await AddGuildUserAsync(ulong userId, string accessToken, Action<addguilduserproperties> func = null, RequestOptions options = null)


Третий вариант, если вы хотите запустить его из метода, отличного от ansync, может заключаться в том, чтобы запустить его в отдельной задаче:

IGuildUser user = Task.Run(() => AddGuildUserAsync(ulong userId, string accessToken, Action<addguilduserproperties> func = null, RequestOptions options = null).Result;


Richard MacCutchan

Это было бы легче прочитать, если бы вы правильно отформатировали свои блоки кода.

Wastedtalent

Я исправил форматирование.

Richard Deeming

Ваш третий вариант не сработает. Task.Run возвращает значение Task<TResult>, а не результат выполнения поставленной задачи. Вам все равно придется блокировать или ждать результата выполнения задачи, так что это не даст вам никаких преимуществ по сравнению с двумя другими вариантами.

Wastedtalent

Спасибо, я пропустил этот результат.