트랜잭션 범위를 사용하는 비동기 캐시 및 데이터베이스 업데이트는 다음과 같습니다. 내가 사용하고있는 Apache Ignite.Net 캐시가 지원하지 않기 때문에 v 4.5.1에 도입 된 TransactionScopeAsyncFlowOption.Enabled
을 사용할 수 없습니다. 나는 명시 적으로 거래를 완료 Synchronization Context Send
방법을 사용하여 다음 현재 Synchronization Context
을 캡처하여 해결 방법을 찾는 시도,하지만 난 여전히 오류 Transaction scope must be disposed on same thread it was created
TransactionScopeAsyncFlowOption.Enabled가없는 비동기 TransactionScope 사용
Async Update
을 달성 대해 이동하는 방법을 어떤 제안을 얻을로이 작동하지 않습니다. 아파치의 Ignite 지원에 의해 제안 중 하나가 같은 것을 사용하는 것입니다
Task.WhenAll(cacheUpdate, databaseUpdate).Wait()
을하지만 블로그를 통해 검색의 공정한 금액 후 최선의 선택
public async Task Update()
{
// Capture Current Synchronization Context
var sc = SynchronizationContext.Current;
TransactionOptions tranOptions = new TransactionOptions();
tranOptions.IsolationLevel = System.Transactions.IsolationLevel.RepeatableRead;
using (var ts = new TransactionScope())
{
// Do Cache Update Operation as Async
Task cacheUpdate = // Update Cache Async
// Do Database Update Operation as Async
Task databaseUpdate = // Update Database Async
await Task.WhenAll(cacheUpdate, databaseUpdate);
sc.Send(new SendOrPostCallback(
o =>
{
ts.Complete();
}), sc);
}
}
에서 실행되는 비동기 방법을 얻을
TransactionScopeAsyncFlowOption.Enabled
필요하지 않습니다. .NET 4.0에서 실행해야합니까? – Evk이것은 Java 프로세스와 통신하는 Apache Ignite.Net에서 공개하는 Cache Update Async 메소드를 사용하며이 옵션은이 옵션을 지원하지 않습니다. 이유에 대한 모든 내부 세부 정보를 알지 못합니다. –
이 기능을 타사 구성 요소의 일부 명시 적 지원이 필요하다는 것을 모르고 있었습니까? – Evk