Гость
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как правильно вызвать эту асинхронную лямбду ? / 10 сообщений из 10, страница 1 из 1
01.03.2016, 12:32
    #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
01.03.2016, 12:41
    #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
01.03.2016, 12:43
    #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
01.03.2016, 12:45
    #39182411
ProBiotek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как правильно вызвать эту асинхронную лямбду ?
ЕвгенийВ,

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

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

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

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



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

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



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


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