diff --git a/Directory.Build.props b/Directory.Build.props
index 5b17ca697b..c799903b81 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -128,4 +128,8 @@
+
+
+ $(DefineConstants);DO_CONFIGURE_AWAIT_FALSE
+
diff --git a/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/Connection.cs b/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/Connection.cs
index c05853c942..0389cbd45c 100644
--- a/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/Connection.cs
+++ b/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/Connection.cs
@@ -10,6 +10,7 @@
using Microsoft.Data.SqlClient;
using System.Threading;
using System.Threading.Tasks;
+using Xtensive.Core;
using SqlServerConnection = Microsoft.Data.SqlClient.SqlConnection;
namespace Xtensive.Sql.Drivers.SqlServer
@@ -143,11 +144,11 @@ public override async Task RollbackAsync(CancellationToken token = default)
try {
if (!IsTransactionZombied()) {
- await ActiveTransaction.RollbackAsync(token).ConfigureAwait(false);
+ await ActiveTransaction.RollbackAsync(token).ConfigureAwaitFalse();
}
}
finally {
- await ActiveTransaction.DisposeAsync().ConfigureAwait(false);
+ await ActiveTransaction.DisposeAsync().ConfigureAwaitFalse();
ClearActiveTransaction();
}
}
@@ -265,12 +266,12 @@ private async Task OpenWithCheckFastAsync(string checkQueryString, CancellationT
while (!connectionChecked) {
cancellationToken.ThrowIfCancellationRequested();
- await underlyingConnection.OpenAsync(cancellationToken).ConfigureAwait(false);
+ await underlyingConnection.OpenAsync(cancellationToken).ConfigureAwaitFalse();
try {
var command = underlyingConnection.CreateCommand();
- await using (command.ConfigureAwait(false)) {
+ await using (command.ConfigureAwaitFalse()) {
command.CommandText = checkQueryString;
- _ = await command.ExecuteNonQueryAsync(cancellationToken).ConfigureAwait(false);
+ _ = await command.ExecuteNonQueryAsync(cancellationToken).ConfigureAwaitFalse();
}
connectionChecked = true;
}
@@ -308,27 +309,27 @@ private async Task OpenWithCheckAndNotificationAsync(string checkQueryString,
await SqlHelper.NotifyConnectionOpeningAsync(accessors,
UnderlyingConnection, (!connectionChecked && !restoreTriggered), cancellationToken)
- .ConfigureAwait(false);
+ .ConfigureAwaitFalse();
- await underlyingConnection.OpenAsync(cancellationToken).ConfigureAwait(false);
+ await underlyingConnection.OpenAsync(cancellationToken).ConfigureAwaitFalse();
try {
await SqlHelper.NotifyConnectionInitializingAsync(accessors,
UnderlyingConnection, checkQueryString, (!connectionChecked && !restoreTriggered), cancellationToken)
- .ConfigureAwait(false);
+ .ConfigureAwaitFalse();
var command = underlyingConnection.CreateCommand();
- await using (command.ConfigureAwait(false)) {
+ await using (command.ConfigureAwaitFalse()) {
command.CommandText = checkQueryString;
- _ = await command.ExecuteNonQueryAsync(cancellationToken).ConfigureAwait(false);
+ _ = await command.ExecuteNonQueryAsync(cancellationToken).ConfigureAwaitFalse();
}
connectionChecked = true;
await SqlHelper.NotifyConnectionOpenedAsync(accessors, UnderlyingConnection, (!connectionChecked && !restoreTriggered), cancellationToken)
- .ConfigureAwait(false);
+ .ConfigureAwaitFalse();
}
catch (Exception exception) {
await SqlHelper.NotifyConnectionOpeningFailedAsync(accessors,
UnderlyingConnection, exception, (!connectionChecked && !restoreTriggered), cancellationToken)
- .ConfigureAwait(false);
+ .ConfigureAwaitFalse();
if (InternalHelpers.ShouldRetryOn(exception)) {
if (restoreTriggered) {
diff --git a/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/DriverFactory.cs b/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/DriverFactory.cs
index 8cf26837c0..07195c7115 100644
--- a/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/DriverFactory.cs
+++ b/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/DriverFactory.cs
@@ -10,6 +10,7 @@
using Microsoft.Data.SqlClient;
using System.Threading;
using System.Threading.Tasks;
+using Xtensive.Core;
using Xtensive.Orm;
using Xtensive.Sql.Info;
using Xtensive.SqlServer.Resources;
@@ -65,18 +66,18 @@ private static async Task CreateMessageParserAsync(
{
bool isEnglish;
var command = connection.CreateCommand();
- await using (command.ConfigureAwait(false)) {
+ await using (command.ConfigureAwaitFalse()) {
command.CommandText = LangIdQuery;
- isEnglish = (await command.ExecuteScalarAsync(token).ConfigureAwait(false)).ToString()=="0";
+ isEnglish = (await command.ExecuteScalarAsync(token).ConfigureAwaitFalse()).ToString()=="0";
}
var templates = new Dictionary();
command = connection.CreateCommand();
- await using (command.ConfigureAwait(false)) {
+ await using (command.ConfigureAwaitFalse()) {
command.CommandText = MessagesQuery;
- var reader = await command.ExecuteReaderAsync(token).ConfigureAwait(false);
- await using (reader.ConfigureAwait(false)) {
- while (await reader.ReadAsync(token).ConfigureAwait(false)) {
+ var reader = await command.ExecuteReaderAsync(token).ConfigureAwaitFalse();
+ await using (reader.ConfigureAwaitFalse()) {
+ while (await reader.ReadAsync(token).ConfigureAwaitFalse()) {
ReadMessageTemplate(reader, templates);
}
}
@@ -97,9 +98,9 @@ private static bool IsAzure(SqlServerConnection connection)
private static async Task IsAzureAsync(SqlServerConnection connection, CancellationToken token)
{
var command = connection.CreateCommand();
- await using (command.ConfigureAwait(false)) {
+ await using (command.ConfigureAwaitFalse()) {
command.CommandText = VersionQuery;
- return ((string) await command.ExecuteScalarAsync(token).ConfigureAwait(false))
+ return ((string) await command.ExecuteScalarAsync(token).ConfigureAwaitFalse())
.IndexOf("Azure", StringComparison.Ordinal) >= 0;
}
}
@@ -170,23 +171,23 @@ protected override async Task CreateDriverAsync(
var isPooingOn = !IsPoolingOff(connectionString);
configuration.EnsureConnectionIsAlive &= isPooingOn;
- var connection = await CreateAndOpenConnectionAsync(connectionString, configuration, token).ConfigureAwait(false);
- await using (connection.ConfigureAwait(false)) {
+ var connection = await CreateAndOpenConnectionAsync(connectionString, configuration, token).ConfigureAwaitFalse();
+ await using (connection.ConfigureAwaitFalse()) {
var isEnsureAlive = configuration.EnsureConnectionIsAlive;
var forcedServerVersion = configuration.ForcedServerVersion;
var isForcedVersion = !string.IsNullOrEmpty(forcedServerVersion);
var isForcedAzure = isForcedVersion && forcedServerVersion.Equals("azure", StringComparison.OrdinalIgnoreCase);
var isAzure = isForcedAzure
- || (!isForcedVersion && await IsAzureAsync(connection, token).ConfigureAwait(false));
+ || (!isForcedVersion && await IsAzureAsync(connection, token).ConfigureAwaitFalse());
var parser = isAzure
? new ErrorMessageParser()
- : await CreateMessageParserAsync(connection, token).ConfigureAwait(false);
+ : await CreateMessageParserAsync(connection, token).ConfigureAwaitFalse();
var versionString = isForcedVersion
? isForcedAzure ? "10.0.0.0" : forcedServerVersion
: connection.ServerVersion ?? string.Empty;
var version = new Version(versionString);
- var defaultSchema = await GetDefaultSchemaAsync(connection, token: token).ConfigureAwait(false);
+ var defaultSchema = await GetDefaultSchemaAsync(connection, token: token).ConfigureAwaitFalse();
return CreateDriverInstance(connectionString, isAzure, version, defaultSchema, parser, isEnsureAlive);
}
@@ -261,9 +262,9 @@ private static async Task CreateAndOpenConnectionAsync(
if (!configuration.EnsureConnectionIsAlive) {
if (configuration.DbConnectionAccessors.Count == 0)
- await OpenConnectionFast(connection, initScript, true, token).ConfigureAwait(false);
+ await OpenConnectionFast(connection, initScript, true, token).ConfigureAwaitFalse();
else
- await OpenConnectionWithNotification(connection, configuration, true, token).ConfigureAwait(false);
+ await OpenConnectionWithNotification(connection, configuration, true, token).ConfigureAwaitFalse();
return connection;
}
@@ -271,10 +272,10 @@ private static async Task CreateAndOpenConnectionAsync(
? CheckConnectionQuery
: initScript;
if (configuration.DbConnectionAccessors.Count == 0)
- return await EnsureConnectionIsAliveFast(connection, testQuery, true, token).ConfigureAwait(false);
+ return await EnsureConnectionIsAliveFast(connection, testQuery, true, token).ConfigureAwaitFalse();
else
return await EnsureConnectionIsAliveWithNotification(connection, testQuery, configuration.DbConnectionAccessors, true, token)
- .ConfigureAwait(false);
+ .ConfigureAwaitFalse();
}
private static async ValueTask OpenConnectionFast(SqlServerConnection connection,
@@ -285,8 +286,8 @@ private static async ValueTask OpenConnectionFast(SqlServerConnection connection
SqlHelper.ExecuteInitializationSql(connection, sqlScript);
}
else {
- await connection.OpenAsync(token).ConfigureAwait(false);
- await SqlHelper.ExecuteInitializationSqlAsync(connection, sqlScript, token).ConfigureAwait(false);
+ await connection.OpenAsync(token).ConfigureAwaitFalse();
+ await SqlHelper.ExecuteInitializationSqlAsync(connection, sqlScript, token).ConfigureAwaitFalse();
}
}
@@ -362,20 +363,20 @@ private static async ValueTask EnsureConnectionIsAliveFast(
}
else {
try {
- await connection.OpenAsync(token).ConfigureAwait(false);
+ await connection.OpenAsync(token).ConfigureAwaitFalse();
var command = connection.CreateCommand();
- await using (command.ConfigureAwait(false)) {
+ await using (command.ConfigureAwaitFalse()) {
command.CommandText = query;
- _ = await command.ExecuteNonQueryAsync(token).ConfigureAwait(false);
+ _ = await command.ExecuteNonQueryAsync(token).ConfigureAwaitFalse();
}
return connection;
}
catch (Exception exception) {
try {
- await connection.CloseAsync().ConfigureAwait(false);
- await connection.DisposeAsync().ConfigureAwait(false);
+ await connection.CloseAsync().ConfigureAwaitFalse();
+ await connection.DisposeAsync().ConfigureAwaitFalse();
}
catch {
// ignored
@@ -383,7 +384,7 @@ private static async ValueTask EnsureConnectionIsAliveFast(
if (InternalHelpers.ShouldRetryOn(exception)) {
var (isReconnected, newConnection) =
- await TryReconnectFast(connection.ConnectionString, query, isAsync, token).ConfigureAwait(false);
+ await TryReconnectFast(connection.ConnectionString, query, isAsync, token).ConfigureAwaitFalse();
if (isReconnected) {
return newConnection;
}
@@ -434,32 +435,32 @@ private static async ValueTask EnsureConnectionIsAliveWithN
}
}
else {
- await SqlHelper.NotifyConnectionOpeningAsync(connectionAccessos, connection, false, token).ConfigureAwait(false);
+ await SqlHelper.NotifyConnectionOpeningAsync(connectionAccessos, connection, false, token).ConfigureAwaitFalse();
try {
- await connection.OpenAsync(token).ConfigureAwait(false);
+ await connection.OpenAsync(token).ConfigureAwaitFalse();
- await SqlHelper.NotifyConnectionInitializingAsync(connectionAccessos, connection, query, false, token).ConfigureAwait(false);
+ await SqlHelper.NotifyConnectionInitializingAsync(connectionAccessos, connection, query, false, token).ConfigureAwaitFalse();
var command = connection.CreateCommand();
- await using (command.ConfigureAwait(false)) {
+ await using (command.ConfigureAwaitFalse()) {
command.CommandText = query;
- _ = await command.ExecuteNonQueryAsync(token).ConfigureAwait(false);
+ _ = await command.ExecuteNonQueryAsync(token).ConfigureAwaitFalse();
}
- await SqlHelper.NotifyConnectionOpenedAsync(connectionAccessos, connection, false, token).ConfigureAwait(false);
+ await SqlHelper.NotifyConnectionOpenedAsync(connectionAccessos, connection, false, token).ConfigureAwaitFalse();
return connection;
}
catch (Exception exception) {
var retryToConnect = InternalHelpers.ShouldRetryOn(exception);
if (!retryToConnect) {
- await SqlHelper.NotifyConnectionOpeningFailedAsync(connectionAccessos, connection, exception, false, token).ConfigureAwait(false);
+ await SqlHelper.NotifyConnectionOpeningFailedAsync(connectionAccessos, connection, exception, false, token).ConfigureAwaitFalse();
}
var connectionString = connection.ConnectionString;
try {
- await connection.CloseAsync().ConfigureAwait(false);
- await connection.DisposeAsync().ConfigureAwait(false);
+ await connection.CloseAsync().ConfigureAwaitFalse();
+ await connection.DisposeAsync().ConfigureAwaitFalse();
}
catch {
// ignored
@@ -467,7 +468,7 @@ private static async ValueTask EnsureConnectionIsAliveWithN
if (retryToConnect) {
var (isReconnected, newConnection) =
- await TryReconnectWithNotification(connectionString, query, connectionAccessos, isAsync, token).ConfigureAwait(false);
+ await TryReconnectWithNotification(connectionString, query, connectionAccessos, isAsync, token).ConfigureAwaitFalse();
if (isReconnected) {
return newConnection;
}
@@ -499,12 +500,12 @@ private static async ValueTask EnsureConnectionIsAliveWithN
}
else {
try {
- await connection.OpenAsync(token).ConfigureAwait(false);
+ await connection.OpenAsync(token).ConfigureAwaitFalse();
var command = connection.CreateCommand();
- await using (command.ConfigureAwait(false)) {
+ await using (command.ConfigureAwaitFalse()) {
command.CommandText = query;
- _ = await command.ExecuteNonQueryAsync(token).ConfigureAwait(false);
+ _ = await command.ExecuteNonQueryAsync(token).ConfigureAwaitFalse();
}
return (true, connection);
@@ -543,24 +544,24 @@ private static async ValueTask EnsureConnectionIsAliveWithN
}
}
else {
- await SqlHelper.NotifyConnectionOpeningAsync(connectionAccessors, connection, true, token).ConfigureAwait(false);
+ await SqlHelper.NotifyConnectionOpeningAsync(connectionAccessors, connection, true, token).ConfigureAwaitFalse();
try {
- await connection.OpenAsync(token).ConfigureAwait(false);
+ await connection.OpenAsync(token).ConfigureAwaitFalse();
- await SqlHelper.NotifyConnectionInitializingAsync(connectionAccessors, connection, query, true, token).ConfigureAwait(false);
+ await SqlHelper.NotifyConnectionInitializingAsync(connectionAccessors, connection, query, true, token).ConfigureAwaitFalse();
var command = connection.CreateCommand();
- await using (command.ConfigureAwait(false)) {
+ await using (command.ConfigureAwaitFalse()) {
command.CommandText = query;
- _ = await command.ExecuteNonQueryAsync(token).ConfigureAwait(false);
+ _ = await command.ExecuteNonQueryAsync(token).ConfigureAwaitFalse();
}
- await SqlHelper.NotifyConnectionOpenedAsync(connectionAccessors, connection, true, token).ConfigureAwait(false);
+ await SqlHelper.NotifyConnectionOpenedAsync(connectionAccessors, connection, true, token).ConfigureAwaitFalse();
return (true, connection);
}
catch (Exception exception) {
- await SqlHelper.NotifyConnectionOpeningFailedAsync(connectionAccessors, connection, exception, true, token).ConfigureAwait(false);
+ await SqlHelper.NotifyConnectionOpeningFailedAsync(connectionAccessors, connection, exception, true, token).ConfigureAwaitFalse();
await connection.DisposeAsync();
return (false, null);
}
diff --git a/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/v09/Extractor.cs b/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/v09/Extractor.cs
index 23d1c940e8..cd9ce5f010 100644
--- a/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/v09/Extractor.cs
+++ b/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/v09/Extractor.cs
@@ -92,7 +92,7 @@ public override async Task ExtractSchemesAsync(
string catalogName, string[] schemaNames, CancellationToken token = default)
{
var context = CreateContext(catalogName, schemaNames);
- await ExtractCatalogContentsAsync(context, token).ConfigureAwait(false);
+ await ExtractCatalogContentsAsync(context, token).ConfigureAwaitFalse();
return context.Catalog;
}
@@ -110,14 +110,14 @@ protected virtual void ExtractCatalogContents(ExtractionContext context)
protected virtual async Task ExtractCatalogContentsAsync(ExtractionContext context, CancellationToken token)
{
- await ExtractSchemasAsync(context, token).ConfigureAwait(false);
+ await ExtractSchemasAsync(context, token).ConfigureAwaitFalse();
RegisterReplacements(context);
- await ExtractTypesAsync(context, token).ConfigureAwait(false);
- await ExtractTablesAndViewsAsync(context, token).ConfigureAwait(false);
- await ExtractColumnsAsync(context, token).ConfigureAwait(false);
- await ExtractIndexesAsync(context, token).ConfigureAwait(false);
- await ExtractForeignKeysAsync(context, token).ConfigureAwait(false);
- await ExtractFulltextIndexesAsync(context, token).ConfigureAwait(false);
+ await ExtractTypesAsync(context, token).ConfigureAwaitFalse();
+ await ExtractTablesAndViewsAsync(context, token).ConfigureAwaitFalse();
+ await ExtractColumnsAsync(context, token).ConfigureAwaitFalse();
+ await ExtractIndexesAsync(context, token).ConfigureAwaitFalse();
+ await ExtractForeignKeysAsync(context, token).ConfigureAwaitFalse();
+ await ExtractFulltextIndexesAsync(context, token).ConfigureAwaitFalse();
}
protected virtual void RegisterReplacements(ExtractionContext context)
@@ -154,10 +154,10 @@ private async Task ExtractSchemasAsync(ExtractionContext context, CancellationTo
var query = BuildExtractSchemasQuery(context);
var cmd = Connection.CreateCommand(query);
- await using (cmd.ConfigureAwait(false)) {
- var reader = await cmd.ExecuteReaderAsync(token).ConfigureAwait(false);
- await using (reader.ConfigureAwait(false)) {
- while (await reader.ReadAsync(token).ConfigureAwait(false)) {
+ await using (cmd.ConfigureAwaitFalse()) {
+ var reader = await cmd.ExecuteReaderAsync(token).ConfigureAwaitFalse();
+ await using (reader.ConfigureAwaitFalse()) {
+ while (await reader.ReadAsync(token).ConfigureAwaitFalse()) {
ReadSchemaData(reader, context);
}
}
@@ -207,10 +207,10 @@ private async Task ExtractTypesAsync(ExtractionContext context, CancellationToke
var query = BuildExtractTypesQuery(context);
var command = Connection.CreateCommand(query);
- await using (command.ConfigureAwait(false)) {
- var reader = await command.ExecuteReaderAsync(token).ConfigureAwait(false);
- await using (reader.ConfigureAwait(false)) {
- while (await reader.ReadAsync(token).ConfigureAwait(false)) {
+ await using (command.ConfigureAwaitFalse()) {
+ var reader = await command.ExecuteReaderAsync(token).ConfigureAwaitFalse();
+ await using (reader.ConfigureAwaitFalse()) {
+ while (await reader.ReadAsync(token).ConfigureAwaitFalse()) {
ReadTypeData(reader, context);
}
}
@@ -277,10 +277,10 @@ private async Task ExtractTablesAndViewsAsync(ExtractionContext context, Cancell
var query = BuildExtractTablesAndViewsQuery(context);
var cmd = Connection.CreateCommand(query);
- await using (cmd.ConfigureAwait(false)) {
- var reader = await cmd.ExecuteReaderAsync(token).ConfigureAwait(false);
- await using (reader.ConfigureAwait(false)) {
- while (await reader.ReadAsync(token).ConfigureAwait(false)) {
+ await using (cmd.ConfigureAwaitFalse()) {
+ var reader = await cmd.ExecuteReaderAsync(token).ConfigureAwaitFalse();
+ await using (reader.ConfigureAwaitFalse()) {
+ while (await reader.ReadAsync(token).ConfigureAwaitFalse()) {
ReadTableOrViewData(reader, context);
}
}
@@ -362,10 +362,10 @@ private async Task ExtractColumnsAsync(ExtractionContext context, CancellationTo
var currentTableId = 0;
var cmd = Connection.CreateCommand(query);
ColumnResolver columnResolver = null;
- await using (cmd.ConfigureAwait(false)) {
- var reader = await cmd.ExecuteReaderAsync(token).ConfigureAwait(false);
- await using (reader.ConfigureAwait(false)) {
- while (await reader.ReadAsync(token).ConfigureAwait(false)) {
+ await using (cmd.ConfigureAwaitFalse()) {
+ var reader = await cmd.ExecuteReaderAsync(token).ConfigureAwaitFalse();
+ await using (reader.ConfigureAwaitFalse()) {
+ while (await reader.ReadAsync(token).ConfigureAwaitFalse()) {
ReadColumnData(context, reader, ref currentTableId, ref columnResolver);
}
}
@@ -374,10 +374,10 @@ private async Task ExtractColumnsAsync(ExtractionContext context, CancellationTo
query = BuildExtractIdentityColumnsQuery(context);
cmd = Connection.CreateCommand(query);
- await using (cmd.ConfigureAwait(false)) {
- var reader = await cmd.ExecuteReaderAsync(token).ConfigureAwait(false);
- await using (reader.ConfigureAwait(false)) {
- while (await reader.ReadAsync(token).ConfigureAwait(false)) {
+ await using (cmd.ConfigureAwaitFalse()) {
+ var reader = await cmd.ExecuteReaderAsync(token).ConfigureAwaitFalse();
+ await using (reader.ConfigureAwaitFalse()) {
+ while (await reader.ReadAsync(token).ConfigureAwaitFalse()) {
ReadIdentityColumnData(reader, context);
}
}
@@ -613,10 +613,10 @@ private async Task ExtractIndexesAsync(ExtractionContext context, CancellationTo
PrimaryKey primaryKey = null;
UniqueConstraint uniqueConstraint = null;
var cmd = Connection.CreateCommand(query);
- await using (cmd.ConfigureAwait(false)) {
- var reader = await cmd.ExecuteReaderAsync(token).ConfigureAwait(false);
- await using (reader.ConfigureAwait(false)) {
- while (await reader.ReadAsync(token).ConfigureAwait(false)) {
+ await using (cmd.ConfigureAwaitFalse()) {
+ var reader = await cmd.ExecuteReaderAsync(token).ConfigureAwaitFalse();
+ await using (reader.ConfigureAwaitFalse()) {
+ while (await reader.ReadAsync(token).ConfigureAwaitFalse()) {
ReadIndexColumnData(reader, context,
ref tableId, spatialIndexType, ref primaryKey, ref uniqueConstraint, ref index, ref table);
}
@@ -724,10 +724,10 @@ private async Task ExtractForeignKeysAsync(ExtractionContext context, Cancellati
ColumnResolver referencedTable = null;
ForeignKey foreignKey = null;
var cmd = Connection.CreateCommand(query);
- await using (cmd.ConfigureAwait(false)) {
- var reader = await cmd.ExecuteReaderAsync(token).ConfigureAwait(false);
- await using (reader.ConfigureAwait(false)) {
- while (await reader.ReadAsync(token).ConfigureAwait(false)) {
+ await using (cmd.ConfigureAwaitFalse()) {
+ var reader = await cmd.ExecuteReaderAsync(token).ConfigureAwaitFalse();
+ await using (reader.ConfigureAwaitFalse()) {
+ while (await reader.ReadAsync(token).ConfigureAwaitFalse()) {
ReadForeignKeyColumnData(reader, context, ref tableId, ref foreignKey, ref referencingTable, ref referencedTable);
}
}
@@ -800,10 +800,10 @@ protected virtual async Task ExtractFulltextIndexesAsync(ExtractionContext conte
ColumnResolver table = null;
FullTextIndex index = null;
var cmd = Connection.CreateCommand(query);
- await using (cmd.ConfigureAwait(false)) {
- var reader = await cmd.ExecuteReaderAsync(token).ConfigureAwait(false);
- await using (reader.ConfigureAwait(false)) {
- while (await reader.ReadAsync(token).ConfigureAwait(false)) {
+ await using (cmd.ConfigureAwaitFalse()) {
+ var reader = await cmd.ExecuteReaderAsync(token).ConfigureAwaitFalse();
+ await using (reader.ConfigureAwaitFalse()) {
+ while (await reader.ReadAsync(token).ConfigureAwaitFalse()) {
ReadFullTextIndexColumnData(reader, context, ref currentTableId, ref table, ref index);
}
}
diff --git a/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/v11/Extractor.cs b/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/v11/Extractor.cs
index 950ccb9fec..f3ab8116bd 100644
--- a/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/v11/Extractor.cs
+++ b/Orm/Xtensive.Orm.SqlServer/Sql.Drivers.SqlServer/v11/Extractor.cs
@@ -9,6 +9,7 @@
using System.Data.Common;
using System.Threading;
using System.Threading.Tasks;
+using Xtensive.Core;
namespace Xtensive.Sql.Drivers.SqlServer.v11
{
@@ -24,8 +25,8 @@ protected override void ExtractCatalogContents(ExtractionContext context)
protected override async Task ExtractCatalogContentsAsync(ExtractionContext context, CancellationToken token)
{
- await base.ExtractCatalogContentsAsync(context, token).ConfigureAwait(false);
- await ExtractSequencesAsync(context, token).ConfigureAwait(false);
+ await base.ExtractCatalogContentsAsync(context, token).ConfigureAwaitFalse();
+ await ExtractSequencesAsync(context, token).ConfigureAwaitFalse();
}
private void ExtractSequences(ExtractionContext context)
@@ -44,10 +45,10 @@ private async Task ExtractSequencesAsync(ExtractionContext context, Cancellation
var query = BuildExtractSequencesQuery(context);
var cmd = Connection.CreateCommand(query);
- await using (cmd.ConfigureAwait(false)) {
- var reader = await cmd.ExecuteReaderAsync(token).ConfigureAwait(false);
- await using (reader.ConfigureAwait(false)) {
- while (await reader.ReadAsync(token).ConfigureAwait(false)) {
+ await using (cmd.ConfigureAwaitFalse()) {
+ var reader = await cmd.ExecuteReaderAsync(token).ConfigureAwaitFalse();
+ await using (reader.ConfigureAwaitFalse()) {
+ while (await reader.ReadAsync(token).ConfigureAwaitFalse()) {
ReadSequenceData(reader, context);
}
}
diff --git a/Orm/Xtensive.Orm/Core/AsyncFutureResult.cs b/Orm/Xtensive.Orm/Core/AsyncFutureResult.cs
index c48216f334..7cf112720b 100644
--- a/Orm/Xtensive.Orm/Core/AsyncFutureResult.cs
+++ b/Orm/Xtensive.Orm/Core/AsyncFutureResult.cs
@@ -40,7 +40,7 @@ public override async ValueTask GetAsync()
var localTask = task ?? worker();
task = null;
worker = null;
- return await localTask.ConfigureAwait(false);
+ return await localTask.ConfigureAwaitFalse();
}
public override void Dispose()
@@ -64,7 +64,7 @@ public override async ValueTask DisposeAsync()
}
try {
- await GetAsync().ConfigureAwait(false);
+ await GetAsync().ConfigureAwaitFalse();
}
catch (Exception exception) {
logger?.Warning(nameof(Strings.LogAsyncOperationError), exception: exception);
diff --git a/Orm/Xtensive.Orm/Core/DisposableSet.cs b/Orm/Xtensive.Orm/Core/DisposableSet.cs
index 0b2e88ee0a..b4faa49440 100644
--- a/Orm/Xtensive.Orm/Core/DisposableSet.cs
+++ b/Orm/Xtensive.Orm/Core/DisposableSet.cs
@@ -132,7 +132,7 @@ async ValueTask IAsyncDisposable.DisposeAsync()
for (var i = list.Count - 1; i >= 0; i--) {
var disposable = list[i];
if (disposable is IAsyncDisposable asyncDisposable) {
- await aggregator.ExecuteAsync(d => d.DisposeAsync(), asyncDisposable).ConfigureAwait(false);
+ await aggregator.ExecuteAsync(d => d.DisposeAsync(), asyncDisposable).ConfigureAwaitFalse();
}
else {
aggregator.Execute(d => d.Dispose(), disposable);
diff --git a/Orm/Xtensive.Orm/Core/ExceptionAggregator.cs b/Orm/Xtensive.Orm/Core/ExceptionAggregator.cs
index 5a7dd6b345..4ab106b569 100644
--- a/Orm/Xtensive.Orm/Core/ExceptionAggregator.cs
+++ b/Orm/Xtensive.Orm/Core/ExceptionAggregator.cs
@@ -152,7 +152,7 @@ public async ValueTask ExecuteAsync(Func action, T argument)
}
try {
- await action(argument).ConfigureAwait(false);
+ await action(argument).ConfigureAwaitFalse();
}
catch (Exception e) {
HandleException(e);
diff --git a/Orm/Xtensive.Orm/Core/Extensions/DisposableExtensions.cs b/Orm/Xtensive.Orm/Core/Extensions/DisposableExtensions.cs
index 22f6c1c145..d508bd976d 100644
--- a/Orm/Xtensive.Orm/Core/Extensions/DisposableExtensions.cs
+++ b/Orm/Xtensive.Orm/Core/Extensions/DisposableExtensions.cs
@@ -72,7 +72,7 @@ public static async ValueTask DisposeSafelyAsync(this IAsyncDisposable disposabl
{
try {
if (disposable!=null) {
- await disposable.DisposeAsync().ConfigureAwait(false);
+ await disposable.DisposeAsync().ConfigureAwaitFalse();
}
}
catch {
diff --git a/Orm/Xtensive.Orm/Core/Extensions/TaskExtensions.cs b/Orm/Xtensive.Orm/Core/Extensions/TaskExtensions.cs
new file mode 100644
index 0000000000..2b3259f20c
--- /dev/null
+++ b/Orm/Xtensive.Orm/Core/Extensions/TaskExtensions.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Runtime.CompilerServices;
+using System.Threading.Tasks;
+
+namespace Xtensive.Core
+{
+ public static class TaskExtensions
+ {
+#if DO_CONFIGURE_AWAIT_FALSE
+ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static ConfiguredTaskAwaitable ConfigureAwaitFalse(this Task task) => task.ConfigureAwait(false);
+ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static ConfiguredTaskAwaitable ConfigureAwaitFalse(this Task task) => task.ConfigureAwait(false);
+ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static ConfiguredValueTaskAwaitable ConfigureAwaitFalse(this ValueTask task) => task.ConfigureAwait(false);
+ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static ConfiguredValueTaskAwaitable ConfigureAwaitFalse(this ValueTask task) => task.ConfigureAwait(false);
+ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static ConfiguredAsyncDisposable ConfigureAwaitFalse(this IAsyncDisposable source) => source.ConfigureAwait(false);
+ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static ConfiguredCancelableAsyncEnumerable ConfigureAwaitFalse(this IAsyncEnumerable source) => source.ConfigureAwait(false);
+ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static ConfiguredCancelableAsyncEnumerable ConfigureAwaitFalse(this ConfiguredCancelableAsyncEnumerable source) => source.ConfigureAwait(false);
+#else
+ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task ConfigureAwaitFalse(this Task task) => task;
+ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static Task ConfigureAwaitFalse(this Task task) => task;
+ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static ValueTask ConfigureAwaitFalse(this ValueTask task) => task;
+ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static ValueTask ConfigureAwaitFalse(this ValueTask task) => task;
+ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IAsyncDisposable ConfigureAwaitFalse(this IAsyncDisposable source) => source;
+ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static IAsyncEnumerable ConfigureAwaitFalse(this IAsyncEnumerable source) => source;
+ [MethodImpl(MethodImplOptions.AggressiveInlining)] public static ConfiguredCancelableAsyncEnumerable ConfigureAwaitFalse(this ConfiguredCancelableAsyncEnumerable source) => source;
+#endif
+ }
+}
diff --git a/Orm/Xtensive.Orm/Orm/DelayedQuery.cs b/Orm/Xtensive.Orm/Orm/DelayedQuery.cs
index b77e2db2c4..aec1e3589d 100644
--- a/Orm/Xtensive.Orm/Orm/DelayedQuery.cs
+++ b/Orm/Xtensive.Orm/Orm/DelayedQuery.cs
@@ -73,7 +73,7 @@ protected async ValueTask> MaterializeAsync(CancellationToken
}
if (Task.Result==null) {
- await Session.ExecuteUserDefinedDelayedQueriesAsync(false, token).ConfigureAwait(false);
+ await Session.ExecuteUserDefinedDelayedQueriesAsync(false, token).ConfigureAwaitFalse();
}
return materializer.Invoke(RecordSetReader.Create(Task.Result), Session, parameterContext);
diff --git a/Orm/Xtensive.Orm/Orm/DelayedScalarQuery{T}.cs b/Orm/Xtensive.Orm/Orm/DelayedScalarQuery{T}.cs
index e4e4fe7b5a..65cf115d06 100644
--- a/Orm/Xtensive.Orm/Orm/DelayedScalarQuery{T}.cs
+++ b/Orm/Xtensive.Orm/Orm/DelayedScalarQuery{T}.cs
@@ -37,7 +37,7 @@ public sealed class DelayedScalarQuery : DelayedQuery
/// Cancellation token.
/// Value representing scalar query execution result.
public async ValueTask ExecuteAsync(CancellationToken token = default) =>
- (await MaterializeAsync(token).ConfigureAwait(false)).ToScalar(resultAccessMethod);
+ (await MaterializeAsync(token).ConfigureAwaitFalse()).ToScalar(resultAccessMethod);
// Constructors
diff --git a/Orm/Xtensive.Orm/Orm/Domain.cs b/Orm/Xtensive.Orm/Orm/Domain.cs
index 3da42b0a9e..017e2b4a79 100644
--- a/Orm/Xtensive.Orm/Orm/Domain.cs
+++ b/Orm/Xtensive.Orm/Orm/Domain.cs
@@ -363,10 +363,10 @@ internal async Task OpenSessionInternalAsync(SessionConfiguration confi
exceptionDispatchInfo = ExceptionDispatchInfo.Capture(ex);
}
}, TaskContinuationOptions.NotOnCanceled | TaskContinuationOptions.ExecuteSynchronously)
- .ConfigureAwait(false);
+ .ConfigureAwaitFalse();
}
catch (OperationCanceledException) {
- await session.DisposeSafelyAsync().ConfigureAwait(false);
+ await session.DisposeSafelyAsync().ConfigureAwaitFalse();
throw;
}
finally {
@@ -466,8 +466,8 @@ public async ValueTask InnerDispose(bool isAsync)
var driver = Handlers.StorageDriver;
if (isAsync) {
- await driver.CloseConnectionAsync(null, singleConnectionLocal).ConfigureAwait(false);
- await driver.DisposeConnectionAsync(null, singleConnectionLocal).ConfigureAwait(false);
+ await driver.CloseConnectionAsync(null, singleConnectionLocal).ConfigureAwaitFalse();
+ await driver.DisposeConnectionAsync(null, singleConnectionLocal).ConfigureAwaitFalse();
}
else {
driver.CloseConnection(null, singleConnectionLocal);
diff --git a/Orm/Xtensive.Orm/Orm/Internals/Prefetch/Fetcher.cs b/Orm/Xtensive.Orm/Orm/Internals/Prefetch/Fetcher.cs
index 9cbfff4730..468951b797 100644
--- a/Orm/Xtensive.Orm/Orm/Internals/Prefetch/Fetcher.cs
+++ b/Orm/Xtensive.Orm/Orm/Internals/Prefetch/Fetcher.cs
@@ -35,7 +35,7 @@ public async ValueTask ExecuteTasks(IReadOnlyCollection con
RegisterAllEntitySetTasks(containers);
var isExecuted = isAsync
- ? await manager.Owner.Session.ExecuteInternalDelayedQueriesAsync(skipPersist, token).ConfigureAwait(false)
+ ? await manager.Owner.Session.ExecuteInternalDelayedQueriesAsync(skipPersist, token).ConfigureAwaitFalse()
: manager.Owner.Session.ExecuteInternalDelayedQueries(skipPersist);
batchExecuted += isExecuted ? 1 : 0;
@@ -59,7 +59,7 @@ public async ValueTask ExecuteTasks(IReadOnlyCollection con
RegisterAllEntityGroupTasks();
isExecuted = isAsync
- ? await manager.Owner.Session.ExecuteInternalDelayedQueriesAsync(skipPersist, token).ConfigureAwait(false)
+ ? await manager.Owner.Session.ExecuteInternalDelayedQueriesAsync(skipPersist, token).ConfigureAwaitFalse()
: manager.Owner.Session.ExecuteInternalDelayedQueries(skipPersist);
batchExecuted += isExecuted ? 1 : 0;
diff --git a/Orm/Xtensive.Orm/Orm/Internals/Prefetch/PrefetchKeyIterator.cs b/Orm/Xtensive.Orm/Orm/Internals/Prefetch/PrefetchKeyIterator.cs
index 0b5b0029a6..5b5e42bfeb 100644
--- a/Orm/Xtensive.Orm/Orm/Internals/Prefetch/PrefetchKeyIterator.cs
+++ b/Orm/Xtensive.Orm/Orm/Internals/Prefetch/PrefetchKeyIterator.cs
@@ -7,6 +7,7 @@
using System.Collections;
using System.Collections.Generic;
using System.Threading;
+using Xtensive.Core;
namespace Xtensive.Orm.Internals.Prefetch
{
@@ -92,7 +93,7 @@ public async IAsyncEnumerator GetAsyncEnumerator(CancellationToken token = de
resultQueue.Enqueue(key);
var defaultDescriptors = PrefetchHelper.GetCachedDescriptorsForFieldsLoadedByDefault(session.Domain, type);
container.JoinIfPossible(
- await session.Handler.PrefetchAsync(key, type, defaultDescriptors, token).ConfigureAwait(false));
+ await session.Handler.PrefetchAsync(key, type, defaultDescriptors, token).ConfigureAwaitFalse());
}
if (exists && taskCount == session.Handler.PrefetchTaskExecutionCount) {
@@ -101,7 +102,7 @@ public async IAsyncEnumerator GetAsyncEnumerator(CancellationToken token = de
if (!exists) {
container.JoinIfPossible(
- await session.Handler.ExecutePrefetchTasksAsync(token).ConfigureAwait(false));
+ await session.Handler.ExecutePrefetchTasksAsync(token).ConfigureAwaitFalse());
}
if (unknownTypeQueue.Count > 0) {
@@ -110,10 +111,10 @@ public async IAsyncEnumerator GetAsyncEnumerator(CancellationToken token = de
var unknownDescriptors =
PrefetchHelper.GetCachedDescriptorsForFieldsLoadedByDefault(session.Domain, unknownType);
await session.Handler.PrefetchAsync(
- unknownKey, unknownType, unknownDescriptors, token).ConfigureAwait(false);
+ unknownKey, unknownType, unknownDescriptors, token).ConfigureAwaitFalse();
}
- await session.Handler.ExecutePrefetchTasksAsync(token).ConfigureAwait(false);
+ await session.Handler.ExecutePrefetchTasksAsync(token).ConfigureAwaitFalse();
}
while (resultQueue.TryDequeue(out var item)) {
diff --git a/Orm/Xtensive.Orm/Orm/Internals/Prefetch/PrefetchManager.cs b/Orm/Xtensive.Orm/Orm/Internals/Prefetch/PrefetchManager.cs
index d8ac2ebf44..a9f72c0163 100644
--- a/Orm/Xtensive.Orm/Orm/Internals/Prefetch/PrefetchManager.cs
+++ b/Orm/Xtensive.Orm/Orm/Internals/Prefetch/PrefetchManager.cs
@@ -104,7 +104,7 @@ public async Task PrefetchAsync(Key key, TypeInfo type
IReadOnlyList descriptors, CancellationToken token = default)
{
var prefetchTask = Prefetch(key, type, descriptors, true, token);
- return await prefetchTask.ConfigureAwait(false);
+ return await prefetchTask.ConfigureAwaitFalse();
}
private async ValueTask Prefetch(
@@ -148,7 +148,7 @@ private async ValueTask Prefetch(
StrongReferenceContainer container = null;
if (graphContainers.Count >= MaxContainerCount) {
- container = await ExecuteTasks(false, isAsync, token).ConfigureAwait(false);
+ container = await ExecuteTasks(false, isAsync, token).ConfigureAwaitFalse();
}
if (referenceContainer != null) {
@@ -167,7 +167,7 @@ public StrongReferenceContainer ExecuteTasks(bool skipPersist = false) =>
ExecuteTasks(skipPersist, false, default).GetAwaiter().GetResult();
public async Task ExecuteTasksAsync(bool skipPersist, CancellationToken token = default) =>
- await ExecuteTasks(skipPersist, true, token).ConfigureAwait(false);
+ await ExecuteTasks(skipPersist, true, token).ConfigureAwaitFalse();
private async ValueTask ExecuteTasks(bool skipPersist, bool isAsync, CancellationToken token)
{
@@ -177,7 +177,7 @@ private async ValueTask ExecuteTasks(bool skipPersist,
}
try {
var batchExecuted =
- await fetcher.ExecuteTasks(graphContainers.Values, skipPersist, isAsync, token).ConfigureAwait(false);
+ await fetcher.ExecuteTasks(graphContainers.Values, skipPersist, isAsync, token).ConfigureAwaitFalse();
TaskExecutionCount += batchExecuted;
foreach (var graphContainer in graphContainers.Values) {
graphContainer.NotifyAboutExtractionOfKeysWithUnknownType();
diff --git a/Orm/Xtensive.Orm/Orm/Internals/Prefetch/PrefetchQueryAsyncEnumerable.cs b/Orm/Xtensive.Orm/Orm/Internals/Prefetch/PrefetchQueryAsyncEnumerable.cs
index cd553decef..43362ab0e1 100644
--- a/Orm/Xtensive.Orm/Orm/Internals/Prefetch/PrefetchQueryAsyncEnumerable.cs
+++ b/Orm/Xtensive.Orm/Orm/Internals/Prefetch/PrefetchQueryAsyncEnumerable.cs
@@ -42,7 +42,7 @@ async IAsyncEnumerable ProcessItem(TItem item1)
if (item1 != null) {
foreach (var extractorNode in aggregatedNodes) {
var fetchedItems =
- await RegisterPrefetchAsync(extractorNode.ExtractKeys(item1), extractorNode, enumerationIdentifier, token).ConfigureAwait(false);
+ await RegisterPrefetchAsync(extractorNode.ExtractKeys(item1), extractorNode, enumerationIdentifier, token).ConfigureAwaitFalse();
_ = strongReferenceContainer.JoinIfPossible(fetchedItems);
}
}
@@ -52,8 +52,8 @@ async IAsyncEnumerable ProcessItem(TItem item1)
}
while (strongReferenceContainer.JoinIfPossible(
- await sessionHandler.ExecutePrefetchTasksAsync(token).ConfigureAwait(false))) {
- _ = strongReferenceContainer.JoinIfPossible(await ProcessFetchedElementsAsync(enumerationIdentifier, token).ConfigureAwait(false));
+ await sessionHandler.ExecutePrefetchTasksAsync(token).ConfigureAwaitFalse())) {
+ _ = strongReferenceContainer.JoinIfPossible(await ProcessFetchedElementsAsync(enumerationIdentifier, token).ConfigureAwaitFalse());
}
while (resultQueue.TryDequeue(out var resultItem)) {
@@ -64,27 +64,27 @@ await sessionHandler.ExecutePrefetchTasksAsync(token).ConfigureAwait(false))) {
}
if (source is IAsyncEnumerable asyncItemSource) {
- await foreach (var item in asyncItemSource.WithCancellation(token).ConfigureAwait(false)) {
- await foreach (var p in ProcessItem(item).WithCancellation(token).ConfigureAwait(false)) {
+ await foreach (var item in asyncItemSource.WithCancellation(token).ConfigureAwaitFalse()) {
+ await foreach (var p in ProcessItem(item).WithCancellation(token).ConfigureAwaitFalse()) {
yield return p;
}
}
}
else {
var items = source is IQueryable queryableSource
- ? await queryableSource.ExecuteAsync(token).ConfigureAwait(false)
+ ? await queryableSource.ExecuteAsync(token).ConfigureAwaitFalse()
: source;
foreach (var item in items) {
- await foreach (var p in ProcessItem(item).WithCancellation(token).ConfigureAwait(false)) {
+ await foreach (var p in ProcessItem(item).WithCancellation(token).ConfigureAwaitFalse()) {
yield return p;
}
}
}
while (strongReferenceContainer.JoinIfPossible(
- await sessionHandler.ExecutePrefetchTasksAsync(token).ConfigureAwait(false))) {
- _ = strongReferenceContainer.JoinIfPossible(await ProcessFetchedElementsAsync(enumerationIdentifier, token).ConfigureAwait(false));
+ await sessionHandler.ExecutePrefetchTasksAsync(token).ConfigureAwaitFalse())) {
+ _ = strongReferenceContainer.JoinIfPossible(await ProcessFetchedElementsAsync(enumerationIdentifier, token).ConfigureAwaitFalse());
}
while (resultQueue.TryDequeue(out var resultItem)) {
@@ -119,7 +119,7 @@ private async Task RegisterPrefetchAsync(IReadOnlyColl
}
_ = container.JoinIfPossible(
- await sessionHandler.PrefetchAsync(key, type, fieldDescriptors, token).ConfigureAwait(false));
+ await sessionHandler.PrefetchAsync(key, type, fieldDescriptors, token).ConfigureAwaitFalse());
}
var nestedContainers = fieldContainer.NestedNodes.OfType();
@@ -137,7 +137,7 @@ private async Task ProcessFetchedElementsAsync(Guid en
var unknownType = session.EntityStateCache[unknownKey, false].Type;
var unknownDescriptors =
PrefetchHelper.GetCachedDescriptorsForFieldsLoadedByDefault(session.Domain, unknownType);
- _ = await sessionHandler.PrefetchAsync(unknownKey, unknownType, unknownDescriptors, token).ConfigureAwait(false);
+ _ = await sessionHandler.PrefetchAsync(unknownKey, unknownType, unknownDescriptors, token).ConfigureAwaitFalse();
}
while (prefetchQueue.TryDequeue(out var pair)) {
@@ -147,7 +147,7 @@ private async Task ProcessFetchedElementsAsync(Guid en
foreach (var parentKey in parentKeys) {
var entityState = session.EntityStateCache[parentKey, false];
if (entityState == null) {
- _ = container.JoinIfPossible(await sessionHandler.ExecutePrefetchTasksAsync(true, token).ConfigureAwait(false));
+ _ = container.JoinIfPossible(await sessionHandler.ExecutePrefetchTasksAsync(true, token).ConfigureAwaitFalse());
entityState = session.EntityStateCache[parentKey, false];
if (entityState == null) {
throw new InvalidOperationException(string.Format(Strings.ExCannotResolveEntityWithKeyX, parentKey));
@@ -157,7 +157,7 @@ private async Task ProcessFetchedElementsAsync(Guid en
keys.AddRange(nestedNodes.ExtractKeys(entityState.Entity));
}
- _ = container.JoinIfPossible(await RegisterPrefetchAsync(keys, nestedNodes, enumerationId, token).ConfigureAwait(false));
+ _ = container.JoinIfPossible(await RegisterPrefetchAsync(keys, nestedNodes, enumerationId, token).ConfigureAwaitFalse());
}
return container;
diff --git a/Orm/Xtensive.Orm/Orm/Linq/Materialization/MaterializingReader.cs b/Orm/Xtensive.Orm/Orm/Linq/Materialization/MaterializingReader.cs
index f1e600fe4b..764a0f73e9 100644
--- a/Orm/Xtensive.Orm/Orm/Linq/Materialization/MaterializingReader.cs
+++ b/Orm/Xtensive.Orm/Orm/Linq/Materialization/MaterializingReader.cs
@@ -65,7 +65,7 @@ public bool MoveNext()
public async ValueTask MoveNextAsync()
{
- while (await recordSetReader.MoveNextAsync().ConfigureAwait(false)) {
+ while (await recordSetReader.MoveNextAsync().ConfigureAwaitFalse()) {
if (itemMaterializer.CanMaterialize(recordSetReader.Current)) {
return true;
}
diff --git a/Orm/Xtensive.Orm/Orm/Linq/QueryProvider.cs b/Orm/Xtensive.Orm/Orm/Linq/QueryProvider.cs
index 0370e30a6c..c629db68c6 100644
--- a/Orm/Xtensive.Orm/Orm/Linq/QueryProvider.cs
+++ b/Orm/Xtensive.Orm/Orm/Linq/QueryProvider.cs
@@ -142,7 +142,7 @@ private async Task ExecuteAsync(Expression expression,
var query = Translate(expression);
TResult result;
try {
- result = await runQuery(query, Session, new ParameterContext(), token).ConfigureAwait(false);
+ result = await runQuery(query, Session, new ParameterContext(), token).ConfigureAwaitFalse();
}
catch (Exception exception) {
Session.Events.NotifyQueryExecuted(expression, exception);
diff --git a/Orm/Xtensive.Orm/Orm/Linq/Queryable.cs b/Orm/Xtensive.Orm/Orm/Linq/Queryable.cs
index 42affc9d54..596f60e14d 100644
--- a/Orm/Xtensive.Orm/Orm/Linq/Queryable.cs
+++ b/Orm/Xtensive.Orm/Orm/Linq/Queryable.cs
@@ -46,8 +46,8 @@ public IEnumerator GetEnumerator()
///
public async IAsyncEnumerator GetAsyncEnumerator(CancellationToken cancellationToken = default)
{
- var result = await provider.ExecuteSequenceAsync(expression, cancellationToken).ConfigureAwait(false);
- var asyncSource = result.AsAsyncEnumerable().WithCancellation(cancellationToken).ConfigureAwait(false);
+ var result = await provider.ExecuteSequenceAsync(expression, cancellationToken).ConfigureAwaitFalse();
+ var asyncSource = result.AsAsyncEnumerable().WithCancellation(cancellationToken).ConfigureAwaitFalse();
await foreach (var element in asyncSource) {
yield return element;
}
diff --git a/Orm/Xtensive.Orm/Orm/Linq/TranslatedQuery.cs b/Orm/Xtensive.Orm/Orm/Linq/TranslatedQuery.cs
index ff2b72524c..cb9a2cd59e 100644
--- a/Orm/Xtensive.Orm/Orm/Linq/TranslatedQuery.cs
+++ b/Orm/Xtensive.Orm/Orm/Linq/TranslatedQuery.cs
@@ -85,7 +85,7 @@ public QueryResult ExecuteSequence(Session session, ParameterContext param
public async Task ExecuteScalarAsync(
Session session, ParameterContext parameterContext, CancellationToken token)
{
- var sequenceResult = await ExecuteSequenceAsync(session, parameterContext, token).ConfigureAwait(false);
+ var sequenceResult = await ExecuteSequenceAsync(session, parameterContext, token).ConfigureAwaitFalse();
return sequenceResult.ToScalar(ResultAccessMethod);
}
@@ -103,7 +103,7 @@ public async Task> ExecuteSequenceAsync(
{
var newParameterContext = new ParameterContext(parameterContext, TupleParameterBindings);
var recordSetReader =
- await DataSource.GetRecordSetReaderAsync(session, newParameterContext, token).ConfigureAwait(false);
+ await DataSource.GetRecordSetReaderAsync(session, newParameterContext, token).ConfigureAwaitFalse();
return Materializer.Invoke(recordSetReader, session, newParameterContext);
}
diff --git a/Orm/Xtensive.Orm/Orm/PrefetchQuery.cs b/Orm/Xtensive.Orm/Orm/PrefetchQuery.cs
index c3c25ec4df..82231e9747 100644
--- a/Orm/Xtensive.Orm/Orm/PrefetchQuery.cs
+++ b/Orm/Xtensive.Orm/Orm/PrefetchQuery.cs
@@ -8,6 +8,7 @@
using System.Linq.Expressions;
using System.Threading;
using System.Threading.Tasks;
+using Xtensive.Core;
using Xtensive.Collections;
using Xtensive.Orm.Internals.Prefetch;
@@ -82,7 +83,7 @@ public async Task> ExecuteAsync(CancellationToken token =
{
var list = new List();
var asyncEnumerable = new PrefetchQueryAsyncEnumerable(session, source, nodes);
- await foreach (var element in asyncEnumerable.WithCancellation(token).ConfigureAwait(false)) {
+ await foreach (var element in asyncEnumerable.WithCancellation(token).ConfigureAwaitFalse()) {
list.Add(element);
}
diff --git a/Orm/Xtensive.Orm/Orm/Providers/CommandProcessing/BatchingCommandProcessor.cs b/Orm/Xtensive.Orm/Orm/Providers/CommandProcessing/BatchingCommandProcessor.cs
index f2bad23093..c6f30c173e 100644
--- a/Orm/Xtensive.Orm/Orm/Providers/CommandProcessing/BatchingCommandProcessor.cs
+++ b/Orm/Xtensive.Orm/Orm/Providers/CommandProcessing/BatchingCommandProcessor.cs
@@ -81,7 +81,7 @@ public override async Task ExecuteTasksAsync(CommandProcessorContext context, Ca
var processingTasks = context.ProcessingTasks;
while (processingTasks.Count >= batchSize) {
- _ = await ExecuteBatchAsync(batchSize, null, context, token).ConfigureAwait(false);
+ _ = await ExecuteBatchAsync(batchSize, null, context, token).ConfigureAwaitFalse();
}
if (!context.AllowPartialExecution) {
@@ -123,12 +123,12 @@ public override async Task ExecuteTasksWithReaderAsync(QueryRequest
PutTasksForExecution(context);
while (context.ProcessingTasks.Count >= batchSize) {
- _ = await ExecuteBatchAsync(batchSize, null, context, token).ConfigureAwait(false);
+ _ = await ExecuteBatchAsync(batchSize, null, context, token).ConfigureAwaitFalse();
}
for (; ; ) {
var currentBatchSize = (context.ProcessingTasks.Count > batchSize) ? batchSize : context.ProcessingTasks.Count;
- var result = await ExecuteBatchAsync(currentBatchSize, request, context, token).ConfigureAwait(false);
+ var result = await ExecuteBatchAsync(currentBatchSize, request, context, token).ConfigureAwaitFalse();
if (result != null && context.ProcessingTasks.Count == 0) {
return result.CreateReader(request.GetAccessor());
}
@@ -246,11 +246,11 @@ private async Task ExecuteBatchAsync(int numberOfTasks, QueryRequest la
var hasQueryTasks = context.ActiveTasks.Count > 0;
if (!hasQueryTasks && !shouldReturnReader) {
- _ = await command.ExecuteNonQueryAsync(token).ConfigureAwait(false);
+ _ = await command.ExecuteNonQueryAsync(token).ConfigureAwaitFalse();
return null;
}
- await command.ExecuteReaderAsync(token).ConfigureAwait(false);
+ await command.ExecuteReaderAsync(token).ConfigureAwaitFalse();
if (hasQueryTasks) {
var currentQueryTask = 0;
while (currentQueryTask < context.ActiveTasks.Count) {
@@ -269,7 +269,7 @@ private async Task ExecuteBatchAsync(int numberOfTasks, QueryRequest la
}
finally {
if (!shouldReturnReader) {
- await context.ActiveCommand.DisposeSafelyAsync().ConfigureAwait(false);
+ await context.ActiveCommand.DisposeSafelyAsync().ConfigureAwaitFalse();
}
ReleaseCommand(context);
diff --git a/Orm/Xtensive.Orm/Orm/Providers/CommandProcessing/Command.cs b/Orm/Xtensive.Orm/Orm/Providers/CommandProcessing/Command.cs
index bfdeb15625..e7b41a687a 100644
--- a/Orm/Xtensive.Orm/Orm/Providers/CommandProcessing/Command.cs
+++ b/Orm/Xtensive.Orm/Orm/Providers/CommandProcessing/Command.cs
@@ -71,13 +71,13 @@ public void ExecuteReader()
public async Task ExecuteNonQueryAsync(CancellationToken token)
{
_ = Prepare();
- return await origin.Driver.ExecuteNonQueryAsync(origin.Session, underlyingCommand, token).ConfigureAwait(false);
+ return await origin.Driver.ExecuteNonQueryAsync(origin.Session, underlyingCommand, token).ConfigureAwaitFalse();
}
public async Task ExecuteReaderAsync(CancellationToken token)
{
_ = Prepare();
- reader = await origin.Driver.ExecuteReaderAsync(origin.Session, underlyingCommand, token).ConfigureAwait(false);
+ reader = await origin.Driver.ExecuteReaderAsync(origin.Session, underlyingCommand, token).ConfigureAwaitFalse();
}
public bool NextResult()
@@ -93,7 +93,7 @@ public bool NextResult()
public async Task NextResultAsync(CancellationToken token = default)
{
try {
- return await reader.NextResultAsync(token).ConfigureAwait(false);
+ return await reader.NextResultAsync(token).ConfigureAwaitFalse();
}
catch(Exception exception) {
throw TranslateException(exception);
@@ -113,7 +113,7 @@ public bool NextRow()
public async ValueTask NextRowAsync(CancellationToken token = default)
{
try {
- return await reader.ReadAsync(token).ConfigureAwait(false);
+ return await reader.ReadAsync(token).ConfigureAwaitFalse();
}
catch (Exception exception) {
throw TranslateException(exception);
@@ -157,9 +157,9 @@ public async ValueTask DisposeAsync()
{
if (!isDisposed) {
isDisposed = true;
- await reader.DisposeSafelyAsync().ConfigureAwait(false);
- await resources.DisposeSafelyAsync().ConfigureAwait(false);
- await underlyingCommand.DisposeSafelyAsync().ConfigureAwait(false);
+ await reader.DisposeSafelyAsync().ConfigureAwaitFalse();
+ await resources.DisposeSafelyAsync().ConfigureAwaitFalse();
+ await underlyingCommand.DisposeSafelyAsync().ConfigureAwaitFalse();
}
}
diff --git a/Orm/Xtensive.Orm/Orm/Providers/CommandProcessing/CommandProcessorContext.cs b/Orm/Xtensive.Orm/Orm/Providers/CommandProcessing/CommandProcessorContext.cs
index 13537473cc..102e6919a1 100644
--- a/Orm/Xtensive.Orm/Orm/Providers/CommandProcessing/CommandProcessorContext.cs
+++ b/Orm/Xtensive.Orm/Orm/Providers/CommandProcessing/CommandProcessorContext.cs
@@ -68,7 +68,7 @@ private async ValueTask DisposeImpl(bool isAsync)
if (ActiveCommand != null) {
if (isAsync) {
- await ActiveCommand.DisposeAsync().ConfigureAwait(false);
+ await ActiveCommand.DisposeAsync().ConfigureAwaitFalse();
}
else {
ActiveCommand.Dispose();
diff --git a/Orm/Xtensive.Orm/Orm/Providers/CommandProcessing/DataReader.cs b/Orm/Xtensive.Orm/Orm/Providers/CommandProcessing/DataReader.cs
index 410e31b2e6..1189868e02 100644
--- a/Orm/Xtensive.Orm/Orm/Providers/CommandProcessing/DataReader.cs
+++ b/Orm/Xtensive.Orm/Orm/Providers/CommandProcessing/DataReader.cs
@@ -7,6 +7,7 @@
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
+using Xtensive.Core;
using Tuple = Xtensive.Tuples.Tuple;
namespace Xtensive.Orm.Providers
@@ -59,12 +60,12 @@ public async ValueTask MoveNextAsync()
return ((IEnumerator) source).MoveNext();
}
- if (await command.NextRowAsync(token).ConfigureAwait(false)) {
+ if (await command.NextRowAsync(token).ConfigureAwaitFalse()) {
return true;
}
// We don't need the command anymore because all records are processed to the moment.
- await command.DisposeAsync().ConfigureAwait(false);
+ await command.DisposeAsync().ConfigureAwaitFalse();
return false;
}
@@ -92,10 +93,10 @@ public void Dispose()
public async ValueTask DisposeAsync()
{
if (source is Command command) {
- await command.DisposeAsync().ConfigureAwait(false);
+ await command.DisposeAsync().ConfigureAwaitFalse();
}
else {
- await ((IAsyncEnumerator) source).DisposeAsync().ConfigureAwait(false);
+ await ((IAsyncEnumerator) source).DisposeAsync().ConfigureAwaitFalse();
}
}
diff --git a/Orm/Xtensive.Orm/Orm/Providers/CommandProcessing/SimpleCommandProcessor.cs b/Orm/Xtensive.Orm/Orm/Providers/CommandProcessing/SimpleCommandProcessor.cs
index 64feb48571..4f1371e6e2 100644
--- a/Orm/Xtensive.Orm/Orm/Providers/CommandProcessing/SimpleCommandProcessor.cs
+++ b/Orm/Xtensive.Orm/Orm/Providers/CommandProcessing/SimpleCommandProcessor.cs
@@ -93,10 +93,10 @@ public override async Task ExecuteTasksAsync(CommandProcessorContext context, Ca
task.ProcessWith(this, context);
var loadTask = context.ActiveTasks.FirstOrDefault();
if (loadTask!=null) {
- await context.ActiveCommand.ExecuteReaderAsync(token).ConfigureAwait(false);
+ await context.ActiveCommand.ExecuteReaderAsync(token).ConfigureAwaitFalse();
var reader = context.ActiveCommand.CreateReader(loadTask.Request.GetAccessor(), token);
- await using (reader.ConfigureAwait(false)) {
- while (await reader.MoveNextAsync().ConfigureAwait(false)) {
+ await using (reader.ConfigureAwaitFalse()) {
+ while (await reader.MoveNextAsync().ConfigureAwaitFalse()) {
loadTask.Output.Add(reader.Current);
}
}
@@ -104,7 +104,7 @@ public override async Task ExecuteTasksAsync(CommandProcessorContext context, Ca
}
}
finally {
- await context.ActiveCommand.DisposeSafelyAsync().ConfigureAwait(false);
+ await context.ActiveCommand.DisposeSafelyAsync().ConfigureAwaitFalse();
ReleaseCommand(context);
}
}
@@ -132,7 +132,7 @@ public override async Task ExecuteTasksWithReaderAsync(QueryRequest
token.ThrowIfCancellationRequested();
- await ExecuteTasksAsync(context, token).ConfigureAwait(false);
+ await ExecuteTasksAsync(context, token).ConfigureAwaitFalse();
context.AllowPartialExecution = oldValue;
var lastRequestCommand = Factory.CreateCommand();
@@ -140,7 +140,7 @@ public override async Task ExecuteTasksWithReaderAsync(QueryRequest
ValidateCommandPartParameters(commandPart);
lastRequestCommand.AddPart(commandPart);
token.ThrowIfCancellationRequested();
- await lastRequestCommand.ExecuteReaderAsync(token).ConfigureAwait(false);
+ await lastRequestCommand.ExecuteReaderAsync(token).ConfigureAwaitFalse();
return lastRequestCommand.CreateReader(lastRequest.GetAccessor());
}
diff --git a/Orm/Xtensive.Orm/Orm/Providers/CommandWithDataReader.cs b/Orm/Xtensive.Orm/Orm/Providers/CommandWithDataReader.cs
index 67f40513ca..7a2bad36cf 100644
--- a/Orm/Xtensive.Orm/Orm/Providers/CommandWithDataReader.cs
+++ b/Orm/Xtensive.Orm/Orm/Providers/CommandWithDataReader.cs
@@ -26,8 +26,8 @@ public void Dispose()
public async ValueTask DisposeAsync()
{
// Dispose the reader first, at least firebird provider requires it
- await Reader.DisposeAsync().ConfigureAwait(false);
- await Command.DisposeAsync().ConfigureAwait(false);
+ await Reader.DisposeAsync().ConfigureAwaitFalse();
+ await Command.DisposeAsync().ConfigureAwaitFalse();
}
// Constructors
diff --git a/Orm/Xtensive.Orm/Orm/Providers/SqlExecutor.cs b/Orm/Xtensive.Orm/Orm/Providers/SqlExecutor.cs
index e81f6f1cf4..9a445800d3 100644
--- a/Orm/Xtensive.Orm/Orm/Providers/SqlExecutor.cs
+++ b/Orm/Xtensive.Orm/Orm/Providers/SqlExecutor.cs
@@ -40,9 +40,9 @@ public Task ExecuteReaderAsync(
public async Task ExecuteReaderAsync(
ISqlCompileUnit statement, CommandBehavior commandBehavior, CancellationToken token = default)
{
- await EnsureConnectionIsOpenAsync(token).ConfigureAwait(false);
+ await EnsureConnectionIsOpenAsync(token).ConfigureAwaitFalse();
return await ExecuteReaderAsync(
- connection.CreateCommand(Compile(statement)), commandBehavior, token).ConfigureAwait(false);
+ connection.CreateCommand(Compile(statement)), commandBehavior, token).ConfigureAwaitFalse();
}
public int ExecuteNonQuery(ISqlCompileUnit statement)
@@ -54,10 +54,10 @@ public int ExecuteNonQuery(ISqlCompileUnit statement)
public async Task ExecuteNonQueryAsync(ISqlCompileUnit statement, CancellationToken token = default)
{
- await EnsureConnectionIsOpenAsync(token).ConfigureAwait(false);
+ await EnsureConnectionIsOpenAsync(token).ConfigureAwaitFalse();
var command = connection.CreateCommand(Compile(statement));
- await using (command.ConfigureAwait(false)) {
- return await driver.ExecuteNonQueryAsync(session, command, token).ConfigureAwait(false);
+ await using (command.ConfigureAwaitFalse()) {
+ return await driver.ExecuteNonQueryAsync(session, command, token).ConfigureAwaitFalse();
}
}
@@ -70,10 +70,10 @@ public object ExecuteScalar(ISqlCompileUnit statement)
public async Task