Я создал библиотеку протоколирования, а метод журнала возвращает номер ошибки (PK) при внесении записи в БД, который я уведомляю пользователей как часть сообщения об ошибке на их UI. Они также используют этот ключ в качестве справочного материала, когда говорят в команде поддержки.Использование метода библиотеки Async в неасинхронных методах
И у меня есть метод асинхронной для делать то же самое, как показано ниже:
public class Logger
{
public async Task<string> LogAsync(Exception ex)
{
return await DoLogAsync(ex);
}
// some private method, with multiple optional parameters
private Task<string> DoLogAsync(Exception ex)
{
return Task.Run(() => Log(ex));
}
}
Примечание: Я признаю, это асинхронная версия не что иное, как просто оборачивает синхронный метод, Log(), в задаче .Бег. Я не уверен, что еще нужно сделать!
Теперь я планирую использовать метод выше Log(), во всех моих APIs, как показано ниже:
public Result<MyObject> Get()
{
var result = new Result<MyObject>();
try
{
throw new DivideByZeroException();
}
catch (DivideByZeroException ex)
{
string errorId = await _logger.LogAsync(ex);
response.AddErrorMessage("Please Contact Admin with this error #"+errorId);
}
return result;
}
Для того, чтобы сделать выше работы, мне нужно сделать метод API асинхр, так как я жду вызова регистратора.
- Как я могу избежать изменения асинхронного вызова API, только ради Logger? Каковы другие возможности для выполнения этой работы?
- Как вы думаете,
LogAsync()
действительно было бы полезно? Мой поток пользовательского интерфейса будет ожидать, что номер ошибки будет возвращен в любом случае, так почему бы просто не вызвать метод синхронизации? - Существует несколько методов
Log()
, которым не требуется номер ошибки, в свою очередь, вид журнала и забыть. Как вы думаете, асинхронные версии будут полезны в таких сценариях, потому что пользовательский интерфейс ничего не ожидает?
Ответ: На вопрос 1, это работает: Waiting for async/await inside a task
Кроме того, для 2 и 3, имеющие реализации ADO.NET большого смысла, а не Task.Run
Является ли это веб-приложение? – JohanP
это C# ... пожалуйста mid теги :) – ymz
C# - это язык. Вы можете использовать C# для приложений ASP.Net, а также для Web API. – JohanP