Trying to pass function instead lambda expression and finally mixed up why line:
int t2 = await Task.Run( ()=>Allocate2() );
not raises error. This lambda expression ()=>Allocate2()
not returns Task
. Why no error?
How to create task without lambda expression with function Allocate
?
static async void Example()
{
int t = await Task.Run(Allocate);
int t2 = await Task.Run( ()=>Allocate2() );
Console.WriteLine("Compute: " + t);
}
static Task<int> Allocate()
{
return 1;
}
static int Allocate2()
{
return 1;
}
Task.Run()
wants you to pass a parameterless Action
or Func
to it.
A lambda can be assigned to an Action
or a Func
(as appropriate) which is why calling Task.Run()
with a lambda works for you.
If you don't want to use a lambda, you must explicitly create an Action
or a Func
, passing the method you want to call to the constructor of the Action
or the Func
.
The following demonstrates:
static void Main()
{
var task = Task.Run(new Action(MyMethod));
}
static void MyMethod()
{
Console.WriteLine("MyMethod()");
}
OR:
static void Main()
{
var task = Task.Run(new Func<int>(MyMethod));
}
static int MyMethod()
{
Console.WriteLine("MyMethod()");
return 42;
}
Note that this doesn't work if the method needs one or more parameters. In that event, you must use a lambda.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With