所以我已经开始为“ x”应用程序开发超级计算机。与Uber的概念相同。以下代码是我的Signalr集线器上的代码。我使用Signalr在客户端和服务器之间进行通信。因此,当客户请求帮助时,它将连接到RequestForHelp。然后,RequestForHelp将请求发送回正确的供应商。并根据供应商的回答,调用HelpResponseYes HelpResponseNo。我想使它异步。我想将requestforhelp当作任务。因此,当我单击请求按钮时,程序将等待。有什么建议可以做到吗?
public void RequestForHelp(RequestDetails requestDetails, Location customerClientLocation, int customerClientId)
{
Customer Customer = Service.CustomerService.GetCustomerById(requestDetails.CustomerId);
Customer.ClientId = customerClientId;
Customer.ClientLocation = customerClientLocation;
requestDetails.Customer = Customer;
Clients.User(requestDetails.NearestSupplierList.FirstOrDefault().AspNetUserID).requestForHelpInClient(requestDetails);
}
public void HelpResponseYes(RequestDetails requestDetails)
{
//A supplier is matched
}
public void HelpResponseNo(RequestDetails requestDetails)
{
//next supplier on the list
}
答案 0 :(得分:0)
使用async
的唯一原因是如果您有await
的东西。因此,我假设您将使requestForHelpInClient
异步并返回一个Task
,然后可以await
。
就这么简单:
public async void RequestForHelp(RequestDetails requestDetails, Location customerClientLocation, int customerClientId)
{
Customer Customer = Service.CustomerService.GetCustomerById(requestDetails.CustomerId);
Customer.ClientId = customerClientId;
Customer.ClientLocation = customerClientLocation;
requestDetails.Customer = Customer;
await Clients.User(requestDetails.NearestSupplierList.FirstOrDefault().AspNetUserID).requestForHelpInClient(requestDetails);
}
但是,看到async void
时,您总是要认真思考,因为:
由于第2点,我无法在SignalR上使用async
事件处理程序。由于SignalR无法等待您的async
方法完成,因此它可能在第一个请求完成之前开始处理另一个请求。这可能对您来说不是问题。
这对我来说是个问题,所以我使事件处理程序保持同步。