Microsoft.AspNetCore.SignalR SendAsync 参数
Microsoft.AspNetCore.SignalR SendAsync args
有人可以向我解释为什么他们在 AspNetCore.SignalR.SendAsync
方法中使用 arg1, arg2 ....
而不是 params object[] args
吗?
有更好的方法吗?
Screenshot
他们似乎想要 CancellationToken
作为最后一个参数。这是将其作为方法的最后一个参数的常见做法。
await SendAsync(..., arg1, arg2, arg3, cancellationToken);
await SendAsync(..., cancellationToken, arg1, arg2, arg3);
我更喜欢第一行而不是第二行。您只能将 params 用作方法的最后一个参数,这不会让它们将取消标记作为最后一个参数。因此他们决定使用不同数量的参数实现多个重载,这允许他们将 cancellationToken
作为每个重载的最后一个参数。
CancellationToken
是可选的。您会在 documentation 中注意到它被定义为:
System.Threading.CancellationToken cancellationToken = null
(虽然在 actual code 中是 = default
,所以我认为文档是错误的)
Optional arguments必须排在最后。
而且,使用带有 params
关键字的无限参数也必须放在最后。所以你不能在同一个方法定义中同时使用两者。
另一种方法是创建方法,将 CancellationToken
作为倒数第二个参数,并在没有它的情况下重载:
public static Task SendAsync (this HubConnection hubConnection, string methodName, params object[] args) {
return SendAsync(hubConnection, methodName, default, args);
}
public static Task SendAsync (this HubConnection hubConnection, string methodName, CancellationToken cancellationToken, params object[] args) {
...
}
这实际上使 CancellationToken
成为可选的。但是,在这种特定情况下,它还会阻止您发送 CancellationToken
作为第一个参数(在 args
数组中)而不是 cancellationToken
参数,如果您需要这样做的话不管出于什么原因。
但是微软也有标准把CancellationToken
作为他们写的每一个异步方法的最后一个参数。因此,如果他们这样做,他们就会打破这种模式。所以他们决定只允许 10 arguments.
有人可以向我解释为什么他们在 AspNetCore.SignalR.SendAsync
方法中使用 arg1, arg2 ....
而不是 params object[] args
吗?
有更好的方法吗?
Screenshot
他们似乎想要 CancellationToken
作为最后一个参数。这是将其作为方法的最后一个参数的常见做法。
await SendAsync(..., arg1, arg2, arg3, cancellationToken);
await SendAsync(..., cancellationToken, arg1, arg2, arg3);
我更喜欢第一行而不是第二行。您只能将 params 用作方法的最后一个参数,这不会让它们将取消标记作为最后一个参数。因此他们决定使用不同数量的参数实现多个重载,这允许他们将 cancellationToken
作为每个重载的最后一个参数。
CancellationToken
是可选的。您会在 documentation 中注意到它被定义为:
System.Threading.CancellationToken cancellationToken = null
(虽然在 actual code 中是 = default
,所以我认为文档是错误的)
Optional arguments必须排在最后。
而且,使用带有 params
关键字的无限参数也必须放在最后。所以你不能在同一个方法定义中同时使用两者。
另一种方法是创建方法,将 CancellationToken
作为倒数第二个参数,并在没有它的情况下重载:
public static Task SendAsync (this HubConnection hubConnection, string methodName, params object[] args) {
return SendAsync(hubConnection, methodName, default, args);
}
public static Task SendAsync (this HubConnection hubConnection, string methodName, CancellationToken cancellationToken, params object[] args) {
...
}
这实际上使 CancellationToken
成为可选的。但是,在这种特定情况下,它还会阻止您发送 CancellationToken
作为第一个参数(在 args
数组中)而不是 cancellationToken
参数,如果您需要这样做的话不管出于什么原因。
但是微软也有标准把CancellationToken
作为他们写的每一个异步方法的最后一个参数。因此,如果他们这样做,他们就会打破这种模式。所以他们决定只允许 10 arguments.