我对 asp.net 和 C# 很陌生,所以请耐心等待。如果之前有人问过这个问题,我也很抱歉......如果是这样,请引导我到一个有帮助的页面。
我拥有的:
我想进一步研究但不知道如何是:
希望你明白我的问题。如果有人能够就如何处理此任务提供一些指导和/或指示,将不胜感激
更多信息:
使用框架 3.5
使用 Asp.net C# + Ajax
Web 服务是在 solaris 机器上的 gSoap
提前谢谢了。
对不起,我是个菜鸟,我试图回复你的帮助,但发现我可以输入的字符有限。我现在只更新我自己的评论。
谢谢你的建议。抱歉回复晚了,前几天我一直在环顾四周,做了一些更改,使其与“PageAsyncTask”和“IAsyncResult”一起使用。我创建了一个将由页面调用的 Web 服务类。新的 Web 服务类将称为 gSoap Web 服务。我已经设法以某种方式“异步”运行它。
我有一个按钮,它执行:
protected void StartASyncJob()
{
PageAsyncTask task = new PageAsyncTask(
new BeginEventHandler(BeginAsyncCommandTask),
new EndEventHandler(EndAsyncCommandTask),
new EndEventHandler(AsyncCommandTaskTimeOut), null);
RegisterAsyncTask(task);
}
BeginAsyncCommandTask 将遍历网格,获取第一个挂起的任务并调用 Web 服务。
EndAsyncCommandTask 然后将检索返回结果,写出(日志)UpdatePanel。然后它会再次执行 StartASyncJob() 寻找下一个待处理的记录。
只有在页面上不做任何其他事情时,所有这些才有效。
如果我(在异步进程运行时)在(项目)gridview 中搜索更多项目或从中选择一个新任务
(task) 下拉列表,在异步 Web 服务进程完成之前不会触发该事件。当它完成时,下拉列表或搜索事件会触发,我从 Web 服务返回的日志详细信息不会更新。
我猜“等待”是由“PageAsyncTask”从同一页面线程“生成”引起的?
我原以为拥有“异步”网络服务将使用户能够一次做不止一件事,从而提供更好的用户体验。但似乎我错了和/或做得不对。
我还没有尝试过你使用 QueueUserWorkItem 的建议;但在我这样做之前,我可以问一下它是否会产生与使用“PageAsyncTask”相同的效果。使用 QueueUserWorkItem 是否与“从同一页面线程生成”具有相同的效果?
提前谢谢了。对不起,如果我没有很好地解释自己,如果你需要我发布我的代码,请告诉我。
最佳答案
有几种解决方案,但取决于您对服务器的控制程度。
System.Threading.ThreadPool.QueueUserWorkItem(foo => LauchTaskRunner());
假设您实现了一个名为 LaunchTaskRunner 的方法,它在循环中只处理现有任务列表,上面的行将启动它到一个单独的进程中。您可以通过一些静态变量(在页面中声明)与此方法(在单独的线程中运行)进行通信,例如:
public class YourPage : System.Web.UI.Page{
static IList<Task> tasks;
static void LauchTaskRunner(){
// here make use of tasks variable
}
}
每次(任务)更新面板刷新时,它应该基于 呈现任务多变的。
关于c# - asp.net C# ajax 运行 'async' 批处理作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13888975/