Asynchronous 选择同步或异步调用asp.net核心blazor方法

Asynchronous 选择同步或异步调用asp.net核心blazor方法,asynchronous,methods,blazor,synchronous,Asynchronous,Methods,Blazor,Synchronous,我在Blazor中有一个CRUD应用程序,它只是从一个表中获取分配列表,并为数据访问层提供了一个AssignmentMemberService,该服务具有异步版本的方法 public async Task<AssignmentReminder> AddAssignment(AssignmentReminder assignment) { _context.assignments.Add(assignment); await _conte

我在Blazor中有一个CRUD应用程序,它只是从一个表中获取分配列表,并为数据访问层提供了一个AssignmentMemberService,该服务具有异步版本的方法

    public async Task<AssignmentReminder> AddAssignment(AssignmentReminder assignment)
    {
        _context.assignments.Add(assignment);
        await _context.SaveChangesAsync();
        return assignment;
    }
现在,只有一个从本地服务器访问的数据库可以托管在云上,只有一个分配表,以及使用单个用户帐户aspnetusers、aspnetroles等时生成的默认身份验证/授权表
有人能告诉我在异步或同步方法声明之间应该使用哪种方法吗

在一般情况下,如果异步API可用,则应使用它们。这将在服务器端产生更大的可伸缩性,因为异步将允许在异步操作进行期间将调用请求线程用于其他请求


本指南不适用于某些特定场景。例如,如果您正在调用一个通用的异步API,比如Stream.ReadAsync,但您知道该实现实际上与MemoryStream一样是同步的。但是一般来说,如果有异步API,那么您应该使用它。

在一般情况下,如果异步API可用,您应该使用它们。这将在服务器端产生更大的可伸缩性,因为异步将允许在异步操作进行期间将调用请求线程用于其他请求

本指南不适用于某些特定场景。例如,如果您正在调用一个通用的异步API,比如Stream.ReadAsync,但您知道该实现实际上与MemoryStream一样是同步的。但一般来说,如果有一个异步API,那么这就是您应该使用的API

我应该在异步或同步方法声明之间使用哪两种方法

第一个

这里的稀缺资源是线程。您希望降低它们的数量,第一种方法通过释放线程来执行其他工作来实现这一点

在第二种方法中,线程在I/O操作期间暂停。您需要更多线程来处理相同数量的请求

因此,使用异步I/O可以让相同的硬件同时处理更多的请求

我应该在异步或同步方法声明之间使用哪两种方法

第一个

这里的稀缺资源是线程。您希望降低它们的数量,第一种方法通过释放线程来执行其他工作来实现这一点

在第二种方法中,线程在I/O操作期间暂停。您需要更多线程来处理相同数量的请求


因此,使用异步I/O可以让同一硬件同时处理更多请求。

您应该清楚您所说的blazor版本,因为在客户端使用异步方法与在服务器版本中使用异步方法不同。

您应该清楚您所说的blazor版本,因为在客户机中使用异步方法与在服务器版本中使用异步方法不同。

您可以使用wait将控制权让给调用方法。如果调用方法没有工作要做,那么使用异步还是不使用异步都没有区别。在我看来,这就是你的情况。请注意,当您必须检索组件中的数据时,在创建组件时,可以使用OnInitialized或OnInitializedAsync。最后一种方法更可取,因为在检索数据时,可以将控制权交给Blazor,并且组件的呈现正在进行中。另一方面,如果使用OnInitialized,则组件的呈现在data retrievedTask之后开始,这是将数据存储到数据库等长过程的方式。EF异步函数不是必需的。阅读此问答,感谢两个答案,它们试图以稍微不同的方式解决我的问题。顺便问一下,调用和/或执行一个数据库获取/写入操作的异步方法(仅针对少数记录)是否会产生任何性能成本?您可以使用wait来让调用方法获得控制权。如果调用方法没有工作要做,那么使用异步还是不使用异步都没有区别。在我看来,这就是你的情况。请注意,当您必须检索组件中的数据时,在创建组件时,可以使用OnInitialized或OnInitializedAsync。最后一种方法更可取,因为在检索数据时,可以将控制权交给Blazor,并且组件的呈现正在进行中。另一方面,如果使用OnInitialized,则组件的呈现在data retrievedTask之后开始,这是将数据存储到数据库等长过程的方式。EF异步函数不是必需的。阅读此问答,感谢两个答案,它们试图以稍微不同的方式解决我的问题。顺便问一下,callin是否有任何性能成本
g和/或仅对少数记录执行数据库获取/写入操作的异步方法?我认为这解决了我的问题。在我的场景中,我使用它通过YouTube频道和我的Udemy课程教学生/观众。在asp.net core/blazor上的几乎所有Microsoft文档中,他们都专门使用了异步方法和调用,而在我记忆中,他们甚至没有提到为什么这么做。所以这些都是关于异步的很好的解释。我认为这解决了我的问题。在我的场景中,我使用它通过YouTube频道和我的Udemy课程教学生/观众。在asp.net core/blazor上的几乎所有Microsoft文档中,他们都专门使用了异步方法和调用,而在我记忆中,他们甚至没有提到为什么这么做。因此,对于异步,这些都是非常好的解释。
    public  AssignmentReminder AddAssignment(AssignmentReminder assignment)
    {
        _context.assignments.Add(assignment);
         _context.SaveChanges();
        return assignment;
    }