Я использую реализацию gRPC csharp, чтобы две службы могли общаться друг с другом.
Когда звоню от клиента, я устанавливаю Крайний срок. Получая звонок на сервер, я читаю, каков крайний срок. К моему удивлению, значение дедлайна не то же самое, отличается на доли секунды.
В документах gRPC говорится, что Крайний срок - это фиксированный момент времени. Поэтому я ожидал бы получить такое же значение на сервере, но это не так.
Я вижу, что в нем упоминалось об округлении 100нс, но в моем случае это намного больше.
Может ли это учитывать время полета? Я не могу найти такой логики, и это нарушило бы понятие фиксированной точки во времени.
Есть ли ошибка при преобразовании между внутренним Timespec
gRPC и c # DateTime
в исходный код gRPC?
Пример (псевдо) кода:
// client:
var serviceClient = new ServiceClient(new Channel("address", "port", ChannelCredentials.Insecure));
var deadline = DateTime.UtcNow;
Console.WriteLine(deadline.ToString("O"));
serviceClient.SendAsync(request, new CallOptions(null, deadline));
// server:
public override async Task Send(SendRequest request, ServerCallContext context)
{
Console.WriteLine(context.Deadline.ToString("O"));
}
Вывод в консоль:
2020-09-22T14:14:20.8359860Z
для клиента
2020-09-22T14:14:21.2910442Z
для сервера