Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Difference between Task.Run and QueueBackgroundWorkItem in Asp.Net

What exactly is the difference using

Task.Run(() => {       LongRunningMethod(); }); 

or

HostingEnvironment.QueueBackgroundWorkItem(clt => LongRunningMethod()); 

I tested on an Asp.Net MVC application in which I kept on writing a line to a text file for about 10 minutes inside an asynchronous task which is invoked using Task.Run or QBWI.

It goes fine both using Task and QBWI. My async method keeps on writing to that file without any issues till 10 minutes. No disturbance from IIS I observed regarding its recycling.

So what is special about QueueBackgroundWorkItem then?

like image 746
Faisal Mq Avatar asked Apr 29 '15 08:04

Faisal Mq


1 Answers

The documentation has an excellent explanation:

Differs from a normal ThreadPool work item in that ASP.NET can keep track of how many work items registered through this API are currently running, and the ASP.NET runtime will try to delay AppDomain shutdown until these work items have finished executing. This API cannot be called outside of an ASP.NET-managed AppDomain. The provided CancellationToken will be signaled when the application is shutting down.

Task.Factory.StartNew does not register work with the ASP.NET runtime at all. You're running your code for 10 minutes, that makes no difference. IIS recycle happens at particular times which are preset in IIS. If you really want to test whats going on, you can attempt to force a recycle.

like image 59
Yuval Itzchakov Avatar answered Oct 05 '22 12:10

Yuval Itzchakov