im Строите услугу, чтобы вычислить, сколько времени требуется, чтобы выполнить данное функцию и попытку написать ее в удаленном API.
Код: Выделить всё
public interface MyRefitClient
{
[Post("/api/log")]
Task LogAsync([Body] StringContent request, CancellationToken cancellation);
}
< /code>
и служба, которая его использует: < /p>
public class MyBenchmarkingService
{
private readonly MyRefitClient _myRefitClient;
public MyBenchmarkingService(MyRefitClient myRefitClient)
{
_myRefitClient = myRefitClient;
}
public async Task TimedOperationAsync(Func task, string message, Dictionary payload,
CancellationToken cts)
{
var startTime = DateTime.UtcNow.ToString("o", CultureInfo.InvariantCulture);
var sw = Stopwatch.StartNew();
// execute the task
var result = await task();
sw.Stop();
var request = new Dictionary()
{
{ "Message", message },
{ "StartTime", startTime },
{ "ElapsedMilliseconds", sw.ElapsedMilliseconds.ToString(CultureInfo.InvariantCulture) }
};
// 200 here
var logResponse = await _myRefitClient.LogAsync(new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json"), cts);
return result;
}
}
< /code>
и, наконец, использование: < /p>
public class Foo
{
private readonly MyBenchmarkingService _benchmarkingService;
public Foo(MyBenchmarkingService benchmarkingService)
{
_benchmarkingService = benchmarkingService;
}
public async Task DoSomethingAsync()
{
var result = await _benchmarkingService.TimedOperationAsync(async () =>
{
// Simulate some work
return await DoOtherThingAsync();
}, "Doing something", new Dictionary(), CancellationToken.None);
}
async Task DoOtherThingAsync()
{
///......
return "result";
}
}
< /code>
Все классы и службы зарегистрированы в DI как Singleton.
Я могу поместить точку отдыха отладчика в var logresponse < /code> и могу проверить ответ. Но по какой -то странной причине клиент Refit не пишет на удаленный сервер. Однако, если я позвоню в Refit Client автономным, например, < /p>
var startTime = DateTime.UtcNow.ToString("o", CultureInfo.InvariantCulture);
var sw = Stopwatch.StartNew();
// execute the task
await DoOtherThingAsync();
sw.Stop();
var request = new Dictionary()
{
{ "Message", "message" },
{ "StartTime", startTime },
{ "ElapsedMilliseconds", sw.ElapsedMilliseconds.ToString(CultureInfo.InvariantCulture) }
};
// 200 here
var logResponse =
await _myRefitClient.LogAsync(
new StringContent(JsonSerializer.Serialize(request), Encoding.UTF8, "application/json"), cts);
< /code>
Клиент входит в систему на удаленном сервере, как и ожидалось. Таким образом, сервер и ремонт клиента «нормально», но при использовании в сочетании с TimeDoperationAsync Подробнее здесь: https://stackoverflow.com/questions/796 ... sing-refit