首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在执行过程中暂停,保存状态,并在以后从同一点继续?

如何在执行过程中暂停,保存状态,并在以后从同一点继续?
EN

Stack Overflow用户
提问于 2011-11-03 22:41:57
回答 5查看 1.8K关注 0票数 10

我有一个正在做一些处理的线程。我希望能够在执行过程中停止这个线程,以某种方式保存它的位置(以及它正在操作的对象的状态),然后在以后的某个日期(所以在我的计算机重新启动之后)从该位置继续。

在C#中这是不可能的,对吧?如果不是,什么是实现此功能的适当设计?

所以我最初的愿望是有这样的东西

代码语言:javascript
运行
复制
class Foo : Task {   
    void override   Execute(){ 
        //example task
        while(someCondition){
        ...do stuff... 
        }
    }
}

并且能够在该函数内的任何点暂停/保存。当函数结束时,每个人都知道它是完整的。作为另一种选择,这也许是更好的方法。

代码语言:javascript
运行
复制
class Foo : Task {


    void override Execute(State previousState){
        //set someCondition, other stuff
        //IsPaused = false;
        previousState.setUpStuff();

        //example task
        while(someCondition){
            ...do stuff... 
            if(base.IsPauseRequested){
                 base.UpdateState(); //this would be a bit different but just to get the idea
                 base.IsPaused = true;
                 return;
            }
        }

        base.RaiseNotifyTaskComplete();
    }

}

因此,对于其他需要继承我的基类的人来说,第一种情况要简单得多,因为他们只需要实现Execute函数。然而,在第二种情况下,他们必须考虑之前的状态,并管理存在良好暂停点的位置。有没有更好的方法来做这件事?

EN

Stack Overflow用户

发布于 2011-11-03 22:48:14

我不能回答C#,但通常这个问题被称为Persistence,没有通用的简单方法来解决它(除非语言和操作系统提供了它)。您不能根据一个线程进行推理,因为您正在考虑的线程正在引用其他一些(全局或堆)数据。这个问题也与garbage collection (因为垃圾收集器和持久化机制都倾向于扫描整个实时堆)和databases (特别是NoSQL )有关。因此,请在上阅读和教科书,也可参阅OSDEV等网站。

另请参阅this draft报告,阅读Queinnec的一书,并研究现有持久性软件的源代码,包括RefPerSys (当然还有Mono,它是C#的开源实现)

当您想要在cloud computing上下文中持久化processes的网络(或图)时,事情变得更加具有挑战性。然后在网上搜索agent oriented programming

在概念层面上,您的问题与continuation-passing stylecallbacks相关,在这个主题上,您可以找到许多ACM-sponsored会议(例如,PLDIISMM)

票数 1
EN
查看全部 5 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7996778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档