What is a replacement method for Task.Run in .NET 4.0 using C#?

C#.NetAsynchronousTask Parallel-Library

C# Problem Overview


I got this program that gives me syntax error "System.Threading.Tasks.task does not contain a definition for Run."

I am using VB 2010 .NET 4.0 Any ideas? any replacements for Run in .net 4.0?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace ChatApp
{
class ChatProg
{
    static void Main(string[] args)
    {
        Task<int> wakeUp = DoWorkAsync(2000,"Waking up");
        Task.WaitAll(wakeUp);
    }

    static Task<int> DoWorkAsync(int milliseconds, string name)
    {
 
        //error appears below on word Run
        return Task.Run(() =>
            {
                Console.WriteLine("* starting {0} work", name);
                Thread.Sleep(milliseconds);
                Console.WriteLine("* {0} work one", name);
                return 1;
            });
    }
}
}

C# Solutions


Solution 1 - C#

It looks like Task.Factory.StartNew<T> is what you're after.

return Task.Factory.StartNew<int>(() => {
    // ...
    return 1;
});

Since the compiler can infer the return type, this also works:

return Task.Factory.StartNew(() => {
    // ...
    return 1;
});

Solution 2 - C#

The highest voted answer, unfortunately, is not exactly correct:

> Unfortunately, the only overloads for StartNew that take a > TaskScheduler also require you to specify the CancellationToken and > TaskCreationOptions. This means that in order to use > Task.Factory.StartNew to reliably, predictably queue work to the > thread pool, you have to use an overload like this: > > Task.Factory.StartNew(A, CancellationToken.None, > TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);

So the closest thing to Task.Run in 4.0 is something like:

/// <summary>
/// Starts the new <see cref="Task"/> from <paramref name="function"/> on the Default(usually ThreadPool) task scheduler (not on the TaskScheduler.Current).
/// It is a 4.0 method nearly analogous to 4.5 Task.Run.
/// </summary>
/// <typeparam name="T">The type of the return value.</typeparam>
/// <param name="factory">The factory to start from.</param>
/// <param name="function">The function to execute.</param>
/// <returns>The task representing the execution of the <paramref name="function"/>.</returns>
public static Task<T> StartNewOnDefaultScheduler<T>(this TaskFactory factory, Func<T> function)
{
    Contract.Requires(factory != null);
    Contract.Requires(function != null);
    
    return factory
        .StartNew(
            function,
            cancellationToken: CancellationToken.None,
            creationOptions: TaskCreationOptions.None,
            scheduler: TaskScheduler.Default);
}

that can be used like:

Task
    .Factory
    .StartNewOnDefaultScheduler(() => 
        result);

Solution 3 - C#

I changed your code with Task.Factory.StartNew check detail link

 static Task<int> DoWorkAsync(int milliseconds, string name)
        {
            
            
            //error appears below on word Run
            return   Task.Factory.StartNew(() =>
            {
                Console.WriteLine("* starting {0} work", name);
                Thread.Sleep(milliseconds);
                Console.WriteLine("* {0} work one", name);
                return 1;
            });
        }

Solution 4 - C#

In case you're using Microsoft.Bcl.Async here you go:

return TaskEx.Run(() =>
{
	Console.WriteLine("* starting {0} work", name);
	Thread.Sleep(milliseconds);
	Console.WriteLine("* {0} work one", name);
	return 1;
});

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAce CaseryaView Question on Stackoverflow
Solution 1 - C#McGarnagleView Answer on Stackoverflow
Solution 2 - C#Eugene PodskalView Answer on Stackoverflow
Solution 3 - C#Saroop TrivediView Answer on Stackoverflow
Solution 4 - C#Karmakulov KirillView Answer on Stackoverflow