Vladimir Laktionov
Vladimir Laktionov

Reputation: 197

Await async TaskEx

What is TaskEx? In http://www.i-programmer.info/programming/c/1514-async-await-and-the-ui-problem.html?start=1 or await TaskEx.Delay or Await async clarification. I use

Task DoWork()
{
    return Task.Run(() =>
    {
        for (int i = 0; i < 30; i++)
        {
            Thread.Sleep(1000 * 60 * 30);
        }
    });
}

Examples use this

Task DoWork()
{
   return TaskEx.Run(() =>
   {
     for (int i = 0; i < 10; i++)
     {
         Thread.Sleep(500);
     }
   }
 });

I call it like await DoWork(); If you use just Task, await returns nothing and there is no response. If I use TaskEx it says it doesn't exist in context. Should TaskEx be a class or something with some sort of function? Fists one Works it's my mistake.

Upvotes: 14

Views: 10180

Answers (3)

Informagic
Informagic

Reputation: 1192

This can also be achieved with the System.Threading.Timer. As written in the API documentation:

If period is zero (0) or Timeout.Infinite and dueTime is not Timeout.Infinite, callback is invoked once […]

Ergo, a single-shot timer can be created as, for instance,

Timer oneShotTimer = new Timer((object stateInfo) => {
  // your callback code here
}, null, yourOneShotTimePeriodHere, Timeout.Infinite);

There’s also a trick in the API to dispose of the timer from within its callback method: https://stackoverflow.com/a/26410217/3517056

Upvotes: 0

Jon Skeet
Jon Skeet

Reputation: 1503729

TaskEx was just an extra class which initially shipped with the CTPs of the async/await extensions for C# 5 before .NET 4.5 shipped... and is now part of the Async Targeting Pack (aka the Microsoft.Bcl.Async NuGet package) in case you want to use async/await but are targeting .NET 4.0 (which doesn't have some of the code required for it).

If you're using .NET 4.5 or later, just use Task.Run, which does the same thing. (You won't be using the targeting pack, so you won't have TaskEx.) The async targeting pack can't add a static method to the existing Task class, hence the need for TaskEx existing at all.

Upvotes: 29

sara
sara

Reputation: 3589

"TaskEx is a class that exists only in the CTP, since there was no way to add extra methods to the existing Task class in the Framework (as the CTP is implemented using a separate assembly).

It will not exist in the final, RTM version of the framework. The methods defined on TaskEx will be migrated to Task."

Source: https://social.msdn.microsoft.com/Forums/en-US/74c5ba79-76cc-4f73-a3fa-35616525ab80/what-is-the-difference-between-task-and-taskex-?forum=async

CTP was a community preview version of the .NET compiler platform.

Upvotes: 0

Related Questions