Hi,
ich habe eine Designfrage zu Async und Sync Methoden. Ich arbeite gerade an einer Repository Klasse für EntityFramework Core. Ich möchte eine Methode Synchron und Asynchron bereitstellen und dabei doppelten Code vermeiden. Gemäß Posting auf c# - Async and sync versions of method - Stack Overflow ist es zum Beispiel schlecht, Code so zu schreiben:
Ich habe folgende zwei Methoden und möchte hier sinnvoll auf doppelten Code verzichten:
Was ist nun der programmatisch richtige Ansatz um doppelten Code zu vermeiden.
Gruß Magic
ich habe eine Designfrage zu Async und Sync Methoden. Ich arbeite gerade an einer Repository Klasse für EntityFramework Core. Ich möchte eine Methode Synchron und Asynchron bereitstellen und dabei doppelten Code vermeiden. Gemäß Posting auf c# - Async and sync versions of method - Stack Overflow ist es zum Beispiel schlecht, Code so zu schreiben:
C#:
Public static Task DownloadToCacheAsync()
{
return Task.Run(()=>DownloadToCache());
}
Public static void DownloadToCache()
{
DownloadToCacheAsync().Wait();
}
Ich habe folgende zwei Methoden und möchte hier sinnvoll auf doppelten Code verzichten:
C#:
public Environments CreateEnvironment(string name, int objectId)
{
//get env by unique id
var environment = _context.Enivronments.Where(p => p.ObjektID == objectId).FirstOrDefault();
//check if env is already in database
if (environment == null)
{
//create env
environment = new Environments()
{
Name = name,
ObjektID = objectId,
IsActive = false,
Delay = 0,
Sequence = 999
};
_context.Enivronments.Add(environment);
}
else
{
//Update env Name, if it has changed
if (environment.Name != name)
environment.Name = name;
}
return environment;
}
public async Task<Environments> CreateEnvironmentAsync(string name, int objectId)
{
//get env by unique id
var environment = await _context.Enivronments.Where(p => p.ObjektID == objectId).FirstOrDefaultAsync();
//check if env is already in database
if (environment == null)
{
//create enve
environment = new Environments()
{
Name = name,
ObjektID = objectId,
IsActive = false,
Delay = 0,
Sequence = 999
};
await _context.Enivronments.AddAsync(environment);
}
else
{
//Update env Name, if it has changed
if (environment.Name != name)
environment.Name = name;
}
return environment;
}
Was ist nun der programmatisch richtige Ansatz um doppelten Code zu vermeiden.
Gruß Magic