Так что я знаю, что я должен использовать ConfigureAwait(false)
в коде библиотеки в целом.Исключение составляют случаи, когда я знаю, что для продолжения потребуется контекст вызывающего.Однако я не знаю, что мне делать, если я не знаю , так и будет.Я предполагаю, что я не должен использовать ConfigureAwait(false)
в таком случае - однако я хотел бы подтвердить это.
Пример: мой класс имеет несколько событий:
public static event TriggeredWebhookInfo WebhookTriggered;
public static event ReadonlyWebhookInfo WebhookCancelled;
И естьметод (это private
, как он вызывается методом возврата public Task
, но он также использует ConfigureAwait(false)
):
private static async Task<HttpResponseMessage> TriggerTaskAsync(string url, WebhookBody body)
{
if (body == null || url == null)
{
WebhookCancelled?.Invoke(url, body);
Logger.Write(InternalTag.Sender, "Webhook cancelled: " + url, LogType.Normal);
return null;
}
HttpResponseMessage response = await Client.PostAsync(url, GetContent(body)).ConfigureAwait(false);
WebhookTriggered?.Invoke(url, body, response);
Logger.Write(InternalTag.Sender, "Webhook triggered: " + url, LogType.Normal);
return response;
}
Теперь, конечно, это прекрасно работает для любого терминального приложения.Однако что произойдет, если событие вызовет метод в контексте пользовательского интерфейса, назначенный пользователем в нетерминальном приложении?Invoke()
уменьшит ли какие-либо проблемы, или я должен удалить ConfigureAwait(false)
из стека вызовов для этого метода?