Я использую шаблон async/await в .NET 4.5 для реализации некоторых методов обслуживания в WCF. Пример сервиса:
Contract:
[ServiceContract(Namespace = "http://async.test/")]
public interface IAsyncTest
{
Task DoSomethingAsync();
}
Реализация:
MyAsyncService : IAsyncTest
{
public async Task DoSomethingAsync()
{
var context = OperationContext.Current; // context is present
await Task.Delay(10);
context = OperationContext.Current; // context is null
}
}
Проблема заключается в том, что после первого await
OperationContext.Current
возвращает null
, и я не могу получить доступ к OperationContext.Current.IncomingMessageHeaders
.
В этом простом примере это не проблема, так как я могу захватить контекст перед await
. Но в реальном мире кейс OperationContext.Current
обращается из глубины стека вызовов, и я действительно не хочу менять много кода, просто чтобы передать контекст дальше.
Есть ли способ получить контекст работы после пункта await
без передачи его вниз по стеку вручную?