如何在ASP.NET应用程序中调用一些异步代码

Pure.Krome

如果没有数据,在application_startup中,我们用一些假数据为数据库播种。

为此,我们正在使用Async存储数据方法。伟大的。唯一的问题是,我们不确定如何执行此操作,application_startup因为这不是异步方法。

我花了很多时间试图理解@StevenCleary的教程,而且我总是陷入僵局。我完全不理解他一贯的话

通常,您应该使用“一直向下同步”;也就是说,不要阻塞异步代码

但是我只是不知道该怎么做,在这种情况下:(

让我们想象一下这是我正在尝试使用的代码...

protected void Application_Start()
{
    var someFakeData = LoadSomeFakeData();
    var documentStore = new DocumentStore();
    await documentStore.InitializeAsync(someFakeData);

    ...

    // Registers this database as a singleton.
    Container.Register(documentStore);
}

然后..一些使用这个的代码documentStore它是通过建筑注入方式注入的...

public SomeController(IDocumentStore documentStore)
{
    _documentStore = documentStore;
}

public ViewModel GetFoos()
{
    using (var session = _documentStore.OpenSession())
    {
        ... db code goes in here ... 
    }
}

澄清度

不是在这里尝试做一些异步代码。我实际上正在尝试同步调用此异步方法当然,我失去了异步等等等等的好处。但是我对此感到满意。这是启动,很高兴阻止启动。

斯蒂芬·克莱里

在这种情况下,您将异步初始化共享资源。因此,我建议您要么保存Task自身,要么引入异步包装器类型。

使用Task

protected void Application_Start()
{
  var someFakeData = LoadSomeFakeData();
  var documentStore = new DocumentStore();
  var documentStoreTask = documentStore.InitializeAsync(someFakeData);

  ...

  // Registers this database task as a singleton.
  Container.Register(documentStoreTask);
}

但是,这可能太尴尬了,具体取决于Container在这种情况下,您可以引入一个异步包装器类型:

public sealed class DocumentStoreWrapper
{
  private readonly Task<DocumentStore> _documentStore;

  public DocumentStoreWrapper(Data data)
  {
    _documentStore = CreateDocumentStoreAsync(data);
  }

  private static async Task<DocumentStore> CreateDocumentStoreAsync(Data data)
  {
    var result = new DocumentStore();
    await documentStore.InitializeAsync(data);
    ...
    return result;
  }

  public Task<DocumentStore> DocumentStoreTask { get { return _documentStore; } }
}

protected void Application_Start()
{
  var someFakeData = LoadSomeFakeData();
  var documentStoreWrapper = new DocumentStoreWrapper(someFakeData);

  ...

  // Registers this database wrapper as a singleton.
  Container.Register(documentStoreWrapper);
}

或者,您可以使用AsyncLazy<T>,其功能大致相同,但使用后台线程执行初始化代码。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在调用服务中的方法之前异步执行一些代码?

来自分类Dev

如何在我的Android应用程序中添加一些“信息”按钮

来自分类Dev

在Aurelia应用程序中,如何在路线之间添加一些过渡?

来自分类Dev

如何在我的Android应用程序中添加一些“信息”按钮

来自分类Dev

错过了我的asp.net应用程序的一些参考

来自分类Dev

如何对AppStore中的更新应用程序版本执行一些操作

来自分类Dev

如何在ASP.NET MVC应用程序中的线程上放置代码?

来自分类Dev

如何在Asp.net Web窗体应用程序中的代码后面设置SelectParameter?

来自分类Dev

OpenXML:读取 word 文件,添加一些文本并打开它而不将其保存在 ASP.Net Web 应用程序中

来自分类Dev

当用户在应用程序图标上键入内容时,如何触发一些代码?

来自分类Dev

异步/等待如何在ASP.Net应用程序中提供帮助?

来自分类Dev

如何在同一个ASP.NET Web窗体应用程序中包含c#和vb.net代码?

来自分类Dev

如何在同一个ASP.NET Web窗体应用程序中包含c#和vb.net代码?

来自分类Dev

如何在 Xamarin 应用程序的后台调用异步方法

来自分类Dev

如何在ASP.NET WebForms应用程序旁边运行OWIN代码?

来自分类Dev

C# 如何在我的 Windows 窗体应用程序中的字符串中进行一些基本的数学运算

来自分类常见问题

如何在AngularJS应用程序中添加一些小的实用程序函数?

来自分类Dev

如何在React-Native应用程序中处理对Firebase的异步调用?

来自分类Dev

如何在React-Native应用程序中处理对Firebase的异步调用?

来自分类Dev

如何在Gluon JavaFX应用程序中处理异步API调用

来自分类Dev

如何在Xamarin Forms应用程序本地保存一些用户数据?

来自分类Dev

如何在MVC应用程序中使用JWT,其中使用IdentityServer4的一些JavaScript部分

来自分类Dev

安装应用程序后如何立即执行一些操作?

来自分类Dev

如何从Xubuntu删除一些我不使用的应用程序?

来自分类Dev

如何从我的应用程序生成一些设置的exe文件

来自分类Dev

Google应用程序脚本:如何为自动电子邮件添加一些样式?

来自分类Dev

如何通过延迟/延迟一些启动应用程序来减少登录时间?

来自分类Dev

Azure AD应用程序-如何从C#或Powershell设置一些参数?

来自分类Dev

Android,如何提取系统应用程序并执行一些检查

Related 相关文章

  1. 1

    如何在调用服务中的方法之前异步执行一些代码?

  2. 2

    如何在我的Android应用程序中添加一些“信息”按钮

  3. 3

    在Aurelia应用程序中,如何在路线之间添加一些过渡?

  4. 4

    如何在我的Android应用程序中添加一些“信息”按钮

  5. 5

    错过了我的asp.net应用程序的一些参考

  6. 6

    如何对AppStore中的更新应用程序版本执行一些操作

  7. 7

    如何在ASP.NET MVC应用程序中的线程上放置代码?

  8. 8

    如何在Asp.net Web窗体应用程序中的代码后面设置SelectParameter?

  9. 9

    OpenXML:读取 word 文件,添加一些文本并打开它而不将其保存在 ASP.Net Web 应用程序中

  10. 10

    当用户在应用程序图标上键入内容时,如何触发一些代码?

  11. 11

    异步/等待如何在ASP.Net应用程序中提供帮助?

  12. 12

    如何在同一个ASP.NET Web窗体应用程序中包含c#和vb.net代码?

  13. 13

    如何在同一个ASP.NET Web窗体应用程序中包含c#和vb.net代码?

  14. 14

    如何在 Xamarin 应用程序的后台调用异步方法

  15. 15

    如何在ASP.NET WebForms应用程序旁边运行OWIN代码?

  16. 16

    C# 如何在我的 Windows 窗体应用程序中的字符串中进行一些基本的数学运算

  17. 17

    如何在AngularJS应用程序中添加一些小的实用程序函数?

  18. 18

    如何在React-Native应用程序中处理对Firebase的异步调用?

  19. 19

    如何在React-Native应用程序中处理对Firebase的异步调用?

  20. 20

    如何在Gluon JavaFX应用程序中处理异步API调用

  21. 21

    如何在Xamarin Forms应用程序本地保存一些用户数据?

  22. 22

    如何在MVC应用程序中使用JWT,其中使用IdentityServer4的一些JavaScript部分

  23. 23

    安装应用程序后如何立即执行一些操作?

  24. 24

    如何从Xubuntu删除一些我不使用的应用程序?

  25. 25

    如何从我的应用程序生成一些设置的exe文件

  26. 26

    Google应用程序脚本:如何为自动电子邮件添加一些样式?

  27. 27

    如何通过延迟/延迟一些启动应用程序来减少登录时间?

  28. 28

    Azure AD应用程序-如何从C#或Powershell设置一些参数?

  29. 29

    Android,如何提取系统应用程序并执行一些检查

热门标签

归档