Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to construct a Task without starting it?

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; } 
like image 835
G. Stoynev Avatar asked Apr 17 '13 17:04

G. Stoynev


People also ask

How do you instantiate a task?

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.

How do I create a new task in C#?

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();


1 Answers

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"); 
like image 169
Vyacheslav Volkov Avatar answered Sep 18 '22 19:09

Vyacheslav Volkov