排队异步任务操作?

时间:2013-01-16 13:57:59

标签: c# asp.net multitasking

我有一个asp.net Web应用程序,并以一种形式使用异步进程。

Task.Run(async () =>
            {
                foreach (ListItem item in cbListFaculties.Items)
                {
                    if (item.Selected)
                    {
                        service.FinishSyncDepartment(actionId, item.Value);
                    }
                }
            });

但我想要做的是,如果任务已经启动并且用户再次点击该页面,我想说,该任务还没有停止,所以你无法继续。

我该如何解决这个问题?有什么想法吗?

感谢。

3 个答案:

答案 0 :(得分:0)

您应该在Code Behind中保留对任务的引用,因此如果Task尚未处理,则任务尚未完成。

答案 1 :(得分:0)

您可以创建Task对象(而不是一次运行它)并使用IsCompleted property检查它是否已完成。或者您可以使用某个线程安全对象(静态字段)来标记该任务正忙。

如果您需要在页面重新加载期间生存任务 - 那么您必须以某种方式保存对该Task对象的引用(cookie,会话,静态变量,视图状态,缓存,数据库...... )

答案 2 :(得分:0)

像0x49D1写的那样,但是把任务对象放在会话中,不要在网上使用静态字段。