У меня есть класс, который TransactionOperator
выставляет следующий статический метод асинхронного:Написание оболочки для метода асинхронной
public static async Task<bool> ProcessTransactionAsync(Transaction transaction)
{
var someTransactionOperator = ...; // get appropriate operator
// some code here
bool success = await someTransactionOperator.Process(transaction);
// some more code
return bool;
}
Теперь я хочу, чтобы обеспечить метод экземпляра обертки в Transaction
классе. Мой вопрос в том, что было бы правильным/рекомендуемым способом его написания? Я склоняюсь к # 2, потому что чувствует себя правильно, но у меня нет никаких аргументов поддержки для этого выбора.
// Option 1
public bool ProcessAsync()
{
return TransactionOperator.ProcessTransactionAsync(this).Result;
}
// Option 2
public Task<bool> ProcessAsync()
{
return TransactionOperator.ProcessTransactionAsync(this);
}
// Option 3 (compiler warning because there's no 'await' operator)
public async Task<bool> ProcessAsync()
{
return TransactionOperator.ProcessTransactionAsync(this).Result;
}
// Option 4
public async Task<bool> ProcessAsync()
{
return await TransactionOperator.ProcessTransactionAsync(this);
}
Учитывая, что первый метод не является асинхронным, сначала вам нужно решить, нужно ли вам/хотите, чтобы асинхронный характер метода распространялся из метода. –
Оба варианта 2 и 4 работают. Вариант 3 простой не работает, и вариант 1 опасен как ад (прочитанный оставит вас в тупике). – Aron
@ LasseV.Karlsen Метод экземпляра 'TransactionOperator.Process (транзакция транзакции)', который первая функция, которую я отправил, ждет ответа от сети, поэтому я считаю, что это хорошее место для добавления асинхронной операции. – MarioVW