public async Task<ActionResult> Index()
{
int asnNum = 0, soNum = 0, OrdFirNum = 0, OrdSecNum = 0, OrdSigNum = 0;
List<Task> tasks = new List<Task>();
#region Action方法
System.Threading.CancellationTokenSource cts = new System.Threading.CancellationTokenSource();
TaskFactory taskFactory = new TaskFactory();
Dictionary<string, int> Arrint = new Dictionary<string, int>();
System.Threading.ReaderWriterLock ORWLock = new System.Threading.ReaderWriterLock();
#region 方法1
//Action<string> doGetNum = (data) =>
//{
// new Action(() =>
// {
// try
// {
// //处理方法
// System.Threading.Thread.Sleep(5000);
// // 请求写锁
// ORWLock.AcquireWriterLock(100);
// Models.WebdbContext AppDb = new Models.WebdbContext();
// switch (data)
// {
// case "ASN_ORDER_HEAD":
// Arrint.Add(data, AppDb.ASN_ORDER_HEAD.Count());
// break;
// case "SO_ORDER_HEAD":
// Arrint.Add(data, AppDb.SO_ORDER_HEAD.Count());
// break;
// case "ORDERS_FIRLINE_HEAD":
// Arrint.Add(data, AppDb.ORDERS_FIRLINE_HEAD.Where(x => x.ADDTS.Value.Day == DateTime.Now.Day).Count());
// break;
// case "ORDERS_SECLINE_HEAD":
// Arrint.Add(data, AppDb.ORDERS_SECLINE_HEAD.Where(x => x.ADDTS.Value.Day == DateTime.Now.Day).Count());
// break;
// case "ORDERS_SINGLE_HEAD":
// Arrint.Add(data, AppDb.ORDERS_SINGLE_HEAD.Where(x => x.ADDTS.Value.Day == DateTime.Now.Day).Count());
// break;
// }
// }
// finally
// {
// // 释放写锁
// ORWLock.ReleaseWriterLock();
// }
// }).Invoke();
//};
//tasks.Add(Task.Run(() => { doGetNum("ASN_ORDER_HEAD"); }));
//tasks.Add(Task.Run(() => { doGetNum("SO_ORDER_HEAD"); }));
//tasks.Add(Task.Run(() => { doGetNum("ORDERS_FIRLINE_HEAD"); }));
//tasks.Add(Task.Run(() => { doGetNum("ORDERS_SECLINE_HEAD"); }));
//tasks.Add(Task.Run(() => { doGetNum("ORDERS_SINGLE_HEAD"); }));
//Task OTask = taskFactory.ContinueWhenAll(tasks.ToArray(), x => new Action(() =>
//{
// foreach (var item in Arrint)
// {
// switch (item.Key)
// {
// case "ASN_ORDER_HEAD":
// asnNum = item.Value;
// break;
// case "SO_ORDER_HEAD":
// soNum = item.Value;
// break;
// case "ORDERS_FIRLINE_HEAD":
// OrdFirNum = item.Value;
// break;
// case "ORDERS_SECLINE_HEAD":
// OrdSecNum = item.Value;
// break;
// case "ORDERS_SINGLE_HEAD":
// OrdSigNum = item.Value;
// break;
// }
// }
//}).Invoke());
#region 方法2
Action<string,System.Threading.CancellationToken> doGetNum = (data, ct) =>
{
new Action(() =>
{
try
{
if (ct.IsCancellationRequested)
return;
//处理方法
System.Threading.Thread.Sleep(5000);
// 请求写锁
ORWLock.AcquireWriterLock(100);
Models.WebdbContext AppDb = new Models.WebdbContext();
switch (data)
{
case "ASN_ORDER_HEAD":
Arrint.Add(data, AppDb.ASN_ORDER_HEAD.Count());
break;
case "SO_ORDER_HEAD":
Arrint.Add(data, AppDb.SO_ORDER_HEAD.Count());
break;
case "ORDERS_FIRLINE_HEAD":
Arrint.Add(data, AppDb.ORDERS_FIRLINE_HEAD.Where(x => x.ADDTS.Value.Day == DateTime.Now.Day).Count());
break;
case "ORDERS_SECLINE_HEAD":
Arrint.Add(data, AppDb.ORDERS_SECLINE_HEAD.Where(x => x.ADDTS.Value.Day == DateTime.Now.Day).Count());
break;
case "ORDERS_SINGLE_HEAD":
Arrint.Add(data, AppDb.ORDERS_SINGLE_HEAD.Where(x => x.ADDTS.Value.Day == DateTime.Now.Day).Count());
break;
}
}
finally
{
// 释放写锁
ORWLock.ReleaseWriterLock();
}
}).Invoke();
};
#endregion
tasks.Add(Task.Run(() => doGetNum("ASN_ORDER_HEAD", cts.Token), cts.Token));
tasks.Add(Task.Run(() => doGetNum("SO_ORDER_HEAD", cts.Token), cts.Token));
tasks.Add(Task.Run(() => doGetNum("ORDERS_FIRLINE_HEAD", cts.Token), cts.Token));
tasks.Add(Task.Run(() => doGetNum("ORDERS_SECLINE_HEAD", cts.Token), cts.Token));
tasks.Add(Task.Run(() => doGetNum("ORDERS_SINGLE_HEAD", cts.Token), cts.Token));
Task OTask = taskFactory.ContinueWhenAll(tasks.ToArray(), x => new Action(() =>
{
foreach (var item in Arrint)
{
switch (item.Key)
{
case "ASN_ORDER_HEAD":
asnNum = item.Value;
break;
case "SO_ORDER_HEAD":
soNum = item.Value;
break;
case "ORDERS_FIRLINE_HEAD":
OrdFirNum = item.Value;
break;
case "ORDERS_SECLINE_HEAD":
OrdSecNum = item.Value;
break;
case "ORDERS_SINGLE_HEAD":
OrdSigNum = item.Value;
break;
}
}
}).Invoke(), System.Threading.CancellationToken.None);
#endregion
OTask.Wait();
#endregion
#region 方法2
//tasks.Add(Task.Run(() => { asnNum = GetNum("ASN_ORDER_HEAD"); }));
//tasks.Add(Task.Run(() => { soNum = GetNum("SO_ORDER_HEAD"); }));
//tasks.Add(Task.Run(() => { OrdFirNum = GetNum("ORDERS_FIRLINE_HEAD"); }));
//tasks.Add(Task.Run(() => { OrdSecNum = GetNum("ORDERS_SECLINE_HEAD"); }));
//tasks.Add(Task.Run(() => { OrdSigNum = GetNum("ORDERS_SINGLE_HEAD"); }));
//Task.WaitAll(tasks.ToArray());
#endregion
ViewBag.AsnCount = asnNum;
ViewBag.SOCount = soNum;
ViewBag.PreOrderCount = OrdFirNum + OrdSecNum;
{
int asnNum = 0, soNum = 0, OrdFirNum = 0, OrdSecNum = 0, OrdSigNum = 0;
List<Task> tasks = new List<Task>();
#region Action方法
System.Threading.CancellationTokenSource cts = new System.Threading.CancellationTokenSource();
TaskFactory taskFactory = new TaskFactory();
Dictionary<string, int> Arrint = new Dictionary<string, int>();
System.Threading.ReaderWriterLock ORWLock = new System.Threading.ReaderWriterLock();
#region 方法1
//Action<string> doGetNum = (data) =>
//{
// new Action(() =>
// {
// try
// {
// //处理方法
// System.Threading.Thread.Sleep(5000);
// // 请求写锁
// ORWLock.AcquireWriterLock(100);
// Models.WebdbContext AppDb = new Models.WebdbContext();
// switch (data)
// {
// case "ASN_ORDER_HEAD":
// Arrint.Add(data, AppDb.ASN_ORDER_HEAD.Count());
// break;
// case "SO_ORDER_HEAD":
// Arrint.Add(data, AppDb.SO_ORDER_HEAD.Count());
// break;
// case "ORDERS_FIRLINE_HEAD":
// Arrint.Add(data, AppDb.ORDERS_FIRLINE_HEAD.Where(x => x.ADDTS.Value.Day == DateTime.Now.Day).Count());
// break;
// case "ORDERS_SECLINE_HEAD":
// Arrint.Add(data, AppDb.ORDERS_SECLINE_HEAD.Where(x => x.ADDTS.Value.Day == DateTime.Now.Day).Count());
// break;
// case "ORDERS_SINGLE_HEAD":
// Arrint.Add(data, AppDb.ORDERS_SINGLE_HEAD.Where(x => x.ADDTS.Value.Day == DateTime.Now.Day).Count());
// break;
// }
// }
// finally
// {
// // 释放写锁
// ORWLock.ReleaseWriterLock();
// }
// }).Invoke();
//};
//tasks.Add(Task.Run(() => { doGetNum("ASN_ORDER_HEAD"); }));
//tasks.Add(Task.Run(() => { doGetNum("SO_ORDER_HEAD"); }));
//tasks.Add(Task.Run(() => { doGetNum("ORDERS_FIRLINE_HEAD"); }));
//tasks.Add(Task.Run(() => { doGetNum("ORDERS_SECLINE_HEAD"); }));
//tasks.Add(Task.Run(() => { doGetNum("ORDERS_SINGLE_HEAD"); }));
//Task OTask = taskFactory.ContinueWhenAll(tasks.ToArray(), x => new Action(() =>
//{
// foreach (var item in Arrint)
// {
// switch (item.Key)
// {
// case "ASN_ORDER_HEAD":
// asnNum = item.Value;
// break;
// case "SO_ORDER_HEAD":
// soNum = item.Value;
// break;
// case "ORDERS_FIRLINE_HEAD":
// OrdFirNum = item.Value;
// break;
// case "ORDERS_SECLINE_HEAD":
// OrdSecNum = item.Value;
// break;
// case "ORDERS_SINGLE_HEAD":
// OrdSigNum = item.Value;
// break;
// }
// }
//}).Invoke());
#region 方法2
Action<string,System.Threading.CancellationToken> doGetNum = (data, ct) =>
{
new Action(() =>
{
try
{
if (ct.IsCancellationRequested)
return;
//处理方法
System.Threading.Thread.Sleep(5000);
// 请求写锁
ORWLock.AcquireWriterLock(100);
Models.WebdbContext AppDb = new Models.WebdbContext();
switch (data)
{
case "ASN_ORDER_HEAD":
Arrint.Add(data, AppDb.ASN_ORDER_HEAD.Count());
break;
case "SO_ORDER_HEAD":
Arrint.Add(data, AppDb.SO_ORDER_HEAD.Count());
break;
case "ORDERS_FIRLINE_HEAD":
Arrint.Add(data, AppDb.ORDERS_FIRLINE_HEAD.Where(x => x.ADDTS.Value.Day == DateTime.Now.Day).Count());
break;
case "ORDERS_SECLINE_HEAD":
Arrint.Add(data, AppDb.ORDERS_SECLINE_HEAD.Where(x => x.ADDTS.Value.Day == DateTime.Now.Day).Count());
break;
case "ORDERS_SINGLE_HEAD":
Arrint.Add(data, AppDb.ORDERS_SINGLE_HEAD.Where(x => x.ADDTS.Value.Day == DateTime.Now.Day).Count());
break;
}
}
finally
{
// 释放写锁
ORWLock.ReleaseWriterLock();
}
}).Invoke();
};
#endregion
tasks.Add(Task.Run(() => doGetNum("ASN_ORDER_HEAD", cts.Token), cts.Token));
tasks.Add(Task.Run(() => doGetNum("SO_ORDER_HEAD", cts.Token), cts.Token));
tasks.Add(Task.Run(() => doGetNum("ORDERS_FIRLINE_HEAD", cts.Token), cts.Token));
tasks.Add(Task.Run(() => doGetNum("ORDERS_SECLINE_HEAD", cts.Token), cts.Token));
tasks.Add(Task.Run(() => doGetNum("ORDERS_SINGLE_HEAD", cts.Token), cts.Token));
Task OTask = taskFactory.ContinueWhenAll(tasks.ToArray(), x => new Action(() =>
{
foreach (var item in Arrint)
{
switch (item.Key)
{
case "ASN_ORDER_HEAD":
asnNum = item.Value;
break;
case "SO_ORDER_HEAD":
soNum = item.Value;
break;
case "ORDERS_FIRLINE_HEAD":
OrdFirNum = item.Value;
break;
case "ORDERS_SECLINE_HEAD":
OrdSecNum = item.Value;
break;
case "ORDERS_SINGLE_HEAD":
OrdSigNum = item.Value;
break;
}
}
}).Invoke(), System.Threading.CancellationToken.None);
#endregion
OTask.Wait();
#endregion
#region 方法2
//tasks.Add(Task.Run(() => { asnNum = GetNum("ASN_ORDER_HEAD"); }));
//tasks.Add(Task.Run(() => { soNum = GetNum("SO_ORDER_HEAD"); }));
//tasks.Add(Task.Run(() => { OrdFirNum = GetNum("ORDERS_FIRLINE_HEAD"); }));
//tasks.Add(Task.Run(() => { OrdSecNum = GetNum("ORDERS_SECLINE_HEAD"); }));
//tasks.Add(Task.Run(() => { OrdSigNum = GetNum("ORDERS_SINGLE_HEAD"); }));
//Task.WaitAll(tasks.ToArray());
#endregion
ViewBag.AsnCount = asnNum;
ViewBag.SOCount = soNum;
ViewBag.PreOrderCount = OrdFirNum + OrdSecNum;
ViewBag.OrderCount = OrdSigNum;
return view();
}
修改自:http://www.cnblogs.com/icyJ/p/Parallel_TaskFactory.html