博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
asp.net 2.0中实现异步处理任务.
阅读量:4323 次
发布时间:2019-06-06

本文共 2274 字,大约阅读时间需要 7 分钟。

以下内容是在newsgroups中解决一个朋友的问题而写的demo, 留下给自己做个备忘录.

----

关于PageAsyncTask在MSDN上的参考

ms-help://MS.VSCC.v90/MS.MSDNQTR.v90.en/fxref_system.web/html/08ffac7a-2c3c-27ee-1445-5284a226be38.htm

说明: 此页面中, 在Page_Load方法中, 同时启动4个较耗时的任务(线程), 让它们并行的运行, 然后等待他们都运行完毕或超时.

using System;
using System.Diagnostics;
using System.Threading;
using System.Web.Mvc;
using System.Web.UI;
 
namespace Portal.Views.Home
{
public partial class Index : ViewPage
{
private string _asyncResult;
private AsyncTaskDelegate _asyncTask;
 
protected void Page_Load(object sender, EventArgs e)
{
Stopwatch sw = Stopwatch.StartNew();
 
PageAsyncTask task1 =
new PageAsyncTask(OnTaskBegin, OnTaskEnd, OnTaskTimeout, "A1", true);
PageAsyncTask task2 =
new PageAsyncTask(OnTaskBegin, OnTaskEnd, OnTaskTimeout, "B2", true);
PageAsyncTask task3 =
new PageAsyncTask(OnTaskBegin, OnTaskEnd, OnTaskTimeout, "C3", true);
PageAsyncTask task4 =
new PageAsyncTask(OnTaskBegin, OnTaskEnd, OnTaskTimeout, "D4", true);
 
RegisterAsyncTask(task1);
RegisterAsyncTask(task2);
RegisterAsyncTask(task3);
RegisterAsyncTask(task4);
 
// By default, an asynchronous task will time out if it has not completed
// within 45 seconds.
AsyncTimeout = TimeSpan.FromSeconds(60);
 
ExecuteRegisteredAsyncTasks();
 
sw.Stop();
 
// now, we can get the task result here.
Response.Write(_asyncResult);
Response.Write(sw.Elapsed.TotalSeconds);
}
 
private IAsyncResult OnTaskBegin(object sender,
EventArgs e,
AsyncCallback callback,
object data)
{
_asyncTask = delegate(string text)
{
// TODO: add your async task here.
string response =
string.Format("AsyncTask {0} started at: {1}. ", text, DateTime.Now);
Thread.Sleep(TimeSpan.FromSeconds(10));
response +=
string.Format("AsyncTask {0} ended at: {1}.\n", text, DateTime.Now);
return response;
};
 
IAsyncResult result = _asyncTask.BeginInvoke((string) data, callback, data);
return result;
}
 
private void OnTaskEnd(IAsyncResult ar)
{
_asyncResult += _asyncTask.EndInvoke(ar);
}
 
private void OnTaskTimeout(IAsyncResult ar)
{
_asyncResult = string.Format("AsyncTask {0} is time out.", ar.AsyncState);
}
 
#region Nested type: AsyncTaskDelegate
 
protected delegate string AsyncTaskDelegate(string text);
 
#endregion
}
}
reference:

转载于:https://www.cnblogs.com/xzwplus/archive/2008/04/27/1172736.html

你可能感兴趣的文章
Codeforces Round #200 (Div. 1)D. Water Tree dfs序
查看>>
linux安全设置
查看>>
Myflight航班查询系统
查看>>
团队-团队编程项目爬取豆瓣电影top250-代码设计规范
查看>>
【linux驱动分析】之dm9000驱动分析(六):dm9000_init和dm9000_probe的实现
查看>>
json具体解释
查看>>
十一:Java之GUI图形Awt和Swing
查看>>
.net在arraylist用法
查看>>
android程序报错“error launching activity com.android.ddmlib.shellcommandunresponsiveexception”的解决方式...
查看>>
ORACLE中CONSTRAINT的四对属性
查看>>
DbVisualizer Pro 9.5.2中文乱码问题
查看>>
numpy.tile()
查看>>
[bzoj3944] Sum
查看>>
hadoop2.7节点的动态增加与删除
查看>>
Ogre: 天空
查看>>
关于NSDictionary的一点感悟
查看>>
CSS长度单位:px和pt的区别
查看>>
50.分治算法练习: 二分算法: 2703 奶牛代理商 XII
查看>>
Wampserver 403问题
查看>>
mysql日志详细解析
查看>>