Регистрация производительности с использованием ремонтаC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Регистрация производительности с использованием ремонта

Сообщение Anonymous »

Контекст: < /p>
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 
кажется, что клиент Refit не ведет себя, как и ожидалось. Есть идеи, какие здесь Gotcha? Закрытие и лямбдас?


Подробнее здесь: https://stackoverflow.com/questions/796 ... sing-refit
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»