I want to use this Task<TResult>
constructor. I can't seem to get the syntax right. Could someone correct my code?
Also, am I right thinking that if a Task
is constructed that way, it's not started?
The constructor I think I need is:
Task<TResult>(Func<Object, TResult>, Object)
The error I get is:
Argument 1: cannot convert from 'method group' to '
System.Func<object,int>
'
static void Main(string[] args) { var t = new Task<int>(GetIntAsync, "3"); // error is on this line // ... } static async Task<int> GetIntAsync(string callerThreadId) { // ... return someInt; }
Rather than calling this constructor, the most common way to instantiate a Task object and launch a task is by calling the static TaskFactory. StartNew(Action<Object>, Object) method. The only advantage offered by this constructor is that it allows object instantiation to be separated from task invocation.
To start a task in C#, follow any of the below given ways. Use a delegate to start a task. Task t = new Task(delegate { PrintMessage(); }); t. Start();
var t = new Task<int>(() => GetIntAsync("3").Result);
Or
var t = new Task<int>((ob) => GetIntAsync((string) ob).Result, "3");
To avoid using lambda, you need to write a static method like this:
private static int GetInt(object state) { return GetIntAsync(((string) state)).Result; }
And then:
var t = new Task<int>(GetInt, "3");
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