gpt4 book ai didi

c# - 如何在 MVC 中处理耗时的服务器端初始化?

转载 作者:行者123 更新时间:2023-11-30 15:35:26 24 4
gpt4 key购买 nike

我目前开始了一个小项目,体验 JS 和 HTML5 的世界。

几个月前我已经尝试过,但我停止了,因为我没有足够的时间从头开始创建 MVC 单页应用程序。有太多的概念和模式需要理解,我会后悔因为在日常工作中没有用到而失去所有这些知识。 用进废退!

昨天我刚找到this post在 John Papa 的博客上,我认为这将是一个很好的开始。它基本上是一个名为 HotTowel 的 MVC 模板,它实现了数据绑定(bind)、缩小等已经很不错的概念。我会尽可能多地体验代码,并会在需要时进一步体验它。

我想构建一个应用程序来从我现有的数据模型项目中获取数据。在我们的 Silverlight 应用程序中,我们通过预加载和初始化字典和其他属性并调用 async Init() 方法(例如下载包含自定义代码的 XML 文件并将它们放入字典)。 MEF 用于摆脱不方便的依赖项。

据我所知,服务器端初始化必须在 Global.asax 文件的 Application_Start() 方法中完成。我想知道如何在这种方法中等待异步调用?最佳做法是什么?我在客户端的查询严重依赖这些要初始化的类。有哪些选择?

我的想法如下:

  • Application_Start() 触发并忘记了异步初始化过程。如果我在初始化完成之前执行请求(我猜是在 Controller 上),我将不得不等待初始化过程的回调并在它到达时立即开始查询。这样做的好处是,初始化运行,而用户已经可以在应用程序中导航。
  • 我会实现某种惰性初始化。我会在第一个请求发出后立即处理初始化。不过,第一个请求可能需要很长时间。
  • 我会在 Application_Start() 中同步运行初始化过程。到目前为止,我所看到的主要缺点是,浏览器窗口对用户来说似乎是卡住的。如果可以让用户跟踪当前的初始化状态(某种启动画面),我会对这个解决方案感到满意。

虽然我不知道他们中的任何一个具体如何工作,但如果你们中的任何人能给我一些关于如何开始以及从哪里开始的建议,我会很高兴。

最佳答案

您可以使用 Task<MyDataModel>来表示数据。

static Task<MyDataModel> dataTask;
public static Task<MyDataModel> LoadDataModelAsync()
{
var ret = new MyDataModel();
await ret.Init();
return ret;
}

Application_Start 开始(或静态构造函数):

dataTask = LoadDataModelAsync();

然后你的每一个需要它的 Action 都可以await让它完成:

MyDataModel data = await dataTask;
...

如果已经完成,await将检测到并继续(同步)。

关于c# - 如何在 MVC 中处理耗时的服务器端初始化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14986942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com