在同步或异步调用 asp.net 核心 Blazor 方法之间进行选择
Choosing between calling asp.net core blazor methods synchronously or asynchronously
我在 Blazor 中有一个 CRUD 应用程序,它只是从 table 中获取分配列表,并且有一个用于数据访问层的 AssignmentReminderService,它有一个方法(异步版本)
public async Task<AssignmentReminder> AddAssignment(AssignmentReminder assignment)
{
_context.assignments.Add(assignment);
await _context.SaveChangesAsync();
return assignment;
}
我也可以用同步代码调用方法:
public AssignmentReminder AddAssignment(AssignmentReminder assignment)
{
_context.assignments.Add(assignment);
_context.SaveChanges();
return assignment;
}
现在它只是一个从本地服务器(也可以托管在云上)访问的数据库,只有一个分配 table 和生成的默认 authentication/authorization tables当一个人使用个人用户帐户时(aspnetusers、aspnetroles 等)
有人可以让我知道我应该使用两种方法中的哪一种(在异步或同步之间)方法声明吗?
在一般情况下,如果可用,您应该使用异步 APIs。这将在服务器端带来更大的可扩展性,因为异步将允许调用请求线程在异步操作进行时用于其他请求。
在某些特定情况下此指南不适用。例如,如果您正在调用通用异步 API(如 Stream.ReadAsync
),但您知道实现实际上是同步的(如 MemoryStream
)。但一般来说,如果有异步 API,那么你应该使用它。
which of the two ways I should use (between async or sync) method declaration?
第一个。
这里的稀缺资源是线程。你想减少它们的数量,第一种方法通过释放线程来做其他工作来实现。
在第二种方法中,线程在 I/O 操作期间被挂起。您将需要更多线程来处理相同数量的请求。
所以使用异步 I/O 可以让同一个硬件同时处理更多的请求。
你应该清楚你说的blazor版本,因为在客户端使用async方法和在服务端使用是不一样的。
我在 Blazor 中有一个 CRUD 应用程序,它只是从 table 中获取分配列表,并且有一个用于数据访问层的 AssignmentReminderService,它有一个方法(异步版本)
public async Task<AssignmentReminder> AddAssignment(AssignmentReminder assignment)
{
_context.assignments.Add(assignment);
await _context.SaveChangesAsync();
return assignment;
}
我也可以用同步代码调用方法:
public AssignmentReminder AddAssignment(AssignmentReminder assignment)
{
_context.assignments.Add(assignment);
_context.SaveChanges();
return assignment;
}
现在它只是一个从本地服务器(也可以托管在云上)访问的数据库,只有一个分配 table 和生成的默认 authentication/authorization tables当一个人使用个人用户帐户时(aspnetusers、aspnetroles 等) 有人可以让我知道我应该使用两种方法中的哪一种(在异步或同步之间)方法声明吗?
在一般情况下,如果可用,您应该使用异步 APIs。这将在服务器端带来更大的可扩展性,因为异步将允许调用请求线程在异步操作进行时用于其他请求。
在某些特定情况下此指南不适用。例如,如果您正在调用通用异步 API(如 Stream.ReadAsync
),但您知道实现实际上是同步的(如 MemoryStream
)。但一般来说,如果有异步 API,那么你应该使用它。
which of the two ways I should use (between async or sync) method declaration?
第一个。
这里的稀缺资源是线程。你想减少它们的数量,第一种方法通过释放线程来做其他工作来实现。
在第二种方法中,线程在 I/O 操作期间被挂起。您将需要更多线程来处理相同数量的请求。
所以使用异步 I/O 可以让同一个硬件同时处理更多的请求。
你应该清楚你说的blazor版本,因为在客户端使用async方法和在服务端使用是不一样的。