2013-10-08 5 views
-2

У меня есть проблема: я никак не могу знать, что я называю этот метод:Generic лямбда-выражение

public static Task<TResult> Run<TResult>(
    Func<Task<TResult>> function 
) 

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

Task.Run(() => { Task.Delay(10000) }); 

Можете ли вы рассказать мне, как я могу это и почему?

С уважением!

+5

Я не понимаю ваш вопрос. Попробуйте перефразировать его. –

+0

Если вы спрашиваете, как/почему 'Task.Run' возвращает' Task '.., то это потому, что предполагается, что вы перегружаете вас на основе делегата' Func', который вы передаете ему. –

ответ

0

Вы не знаете, как назвать общий и асинхронный метод? TResult является заполнителем. Когда вы его используете, вам нужно будет заменить TResult на фактический класс. Кроме того, очень важно, чтобы вы не забыли дождаться результата.

var myResultVar = await Task.Run<MyResult> (() => MyFunctionWhichReturns()); 

public MyResult MyFunctionWhichReturns() 
{ 
    return new MyResult(); 
} 
0

Ты называешь другую перегрузку метода Task.Run:

public static Task Run(Func<Task> function) 

Обзор всех перегрузках является given in the linked MSDN page.