Мне нужно иметь метод, который включает в себя вызов базы данных.Этот метод должен существовать с синхронизирующим вызовом к базе данных (будет внутри SQL Server CLR), а также с асинхронным вызовом базы данных (это будет находиться в клиентском приложении).
В приведенном ниже примере я хочу MyMethodSync иMyMethodAsync для совместного использования как можно большего количества кода, в идеале мне нужен всего 1 метод с bool "call as async".
public static class MockDbAccess
{
public static int GetDbResult(int i, string sql = null)
{
return i + sql?.Length ?? 0;
}
async public static Task<int> GetDbResultAsync(int i, string sql = null)
{
await Task.Delay(2);
return i + sql?.Length ?? 0;
}
}
public class MyClass
{
const string SQL = "SELECT Value FROM Table1 WHERE UniqueCode = @I";
// COPY PASTE version:
public int MyMethodSync(int i)
{
var r1 = i + 4;
var r2 = MockDbAccess.GetDbResult(r1, SQL);
var r3 = r1 + r2 * 7;
return r3;
}
async public Task<int> MyMethodAsync(int i)
{
var r1 = i + 4;
var r2 = await MockDbAccess.GetDbResultAsync(r1, SQL);
var r3 = r1 + r2 * 7;
return r3;
}
// SHARED BUSINESS LOGIC attempt:
int GetR1(int i) => i + 4;
int GetR3(int r1, int r2) => r1 + r2 * 7;
public int MyMethodSync_SharedCode(int i)
{
var r1 = GetR1(i);
var r2 = MockDbAccess.GetDbResult(r1, SQL);
var r3 = GetR3(r1, r2);
return r3;
}
async public Task<int> MyMethodAsync_SharedCode(int i)
{
var r1 = GetR1(i);
var r2 = await MockDbAccess.GetDbResultAsync(r1, SQL);
var r3 = GetR3(r1, r2);
return r3;
}
}
Раздел Попытка SHARED BUSINESS LOGIC - насколько я понял.Очевидно, что в моем приложении методы getR1 и GetR3 намного сложнее.
РЕДАКТИРОВАТЬ - чтобы уточнить: мне нужна версия синхронизации для вызова метода GetDbResult () (представьте, что это какой-то вызов ADO.NET для базы данных SQL Server) и асинхронная для ожидания GetDbResultAsync () (это вызов ядра ASP.NETвеб-сервис).Результат точно такой же, разница только в синхронизации и асинхронном обращении к БД.