powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как правильно вызвать эту асинхронную лямбду ?
10 сообщений из 10, страница 1 из 1
Как правильно вызвать эту асинхронную лямбду ?
    #39182375
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет. Что не получается вызвать лямбду, подскажите в чем ошибка:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
        async Task Method1()
        {
             Func<int, Task<int>> func = async (int i) =>
            {
                await Task.Delay(100);
                return i;
            };

            int r  = await Task<int>.Run(func(1));
        }



Ругается "Argument 1: cannot convert from 'System.Threading.Tasks.Task<int>' to 'System.Action'"

Подскажите как исправить пожалуйста.
...
Рейтинг: 0 / 0
Как правильно вызвать эту асинхронную лямбду ?
    #39182392
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek,
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
   async Task Method1()
        {
            Func<int, Task<int>> func = async (int i) =>
            {
                await Task.Delay(100);
                return i;
            };

            var r = await Task.Run(() => (func(1)));
        }
...
Рейтинг: 0 / 0
Как правильно вызвать эту асинхронную лямбду ?
    #39182400
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekРугается "Argument 1: cannot convert from 'System.Threading.Tasks.Task<int>' to 'System.Action'"правильно ругаетcя, ты возвращаешь int, а делегат объявляешь Task<int>
ProBiotekПодскажите как исправить пожалуйстаСмотря что ты хочешь сделать
Зачем тут двойной await?
...
Рейтинг: 0 / 0
Как правильно вызвать эту асинхронную лямбду ?
    #39182411
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

Блин. Так просто оказывается.
...
Рейтинг: 0 / 0
Как правильно вызвать эту асинхронную лямбду ?
    #39182416
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЗачем тут двойной await?

Первый ожидает завершения Task.Delay. Второй дожидается завершения Task.Run и получает результат.
А с чем вы не согласны ?
...
Рейтинг: 0 / 0
Как правильно вызвать эту асинхронную лямбду ?
    #39182420
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВ,

Подскажите еще. Почему нужно вызывать Task.Run, без указания типов генериков вообще ?
Не понимаю :(

Я думал нужно указать тип, который вернет таска. Т.е. вызывать так Task<int>. Объясните пожалуйста почему тип не указывается ?
...
Рейтинг: 0 / 0
Как правильно вызвать эту асинхронную лямбду ?
    #39182434
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek Объясните пожалуйста почему тип не указывается ?
В данном случае можно указать, но компилятор умный, он вывел тип параметра и вызовет нужную перегрузку метода.
В данном случае эту.
Код: c#
1.
var r = await Task.Run<int>(() => (func(1)));
...
Рейтинг: 0 / 0
Как правильно вызвать эту асинхронную лямбду ?
    #39182462
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕвгенийВProBiotek Объясните пожалуйста почему тип не указывается ?
В данном случае можно указать, но компилятор умный, он вывел тип параметра и вызовет нужную перегрузку метода.
В данном случае эту.
Код: c#
1.
var r = await Task.Run<int>(() => (func(1)));



ок. Но почему Task<int> будет являтся ошибкой ?
...
Рейтинг: 0 / 0
Как правильно вызвать эту асинхронную лямбду ?
    #39182826
Ilya81
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это просто наследуемый класс, можно использовать и его, хотя пользы никакой, но на вызываемый метод это не повлияет никак. Run и Run<TResult> - разные методы. В некоторых случаях компилятор может "догадаться", что подразумевается метод с generic-параметром, тогда его (параметра) указание необязательно, но иногда он (компилятор) это определить не может.
...
Рейтинг: 0 / 0
Как правильно вызвать эту асинхронную лямбду ?
    #39183432
Фотография ЕвгенийВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekЕвгенийВпропущено...

В данном случае можно указать, но компилятор умный, он вывел тип параметра и вызовет нужную перегрузку метода.
В данном случае эту.
Код: c#
1.
var r = await Task.Run<int>(() => (func(1)));



ок. Но почему Task<int> будет являтся ошибкой ?
Не будет, у нас разные лямбды.
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как правильно вызвать эту асинхронную лямбду ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]