我的目标是两种方法:
public Task DoSthgAsync(CancellationToken ct);
和
public void DoSthgSync();
我想这样做:
private async Task<bool> DoSthgMixed(bool async, CancellationToken ct)
{
// … here some synchronous code
PrepareFileLoading();
// Here the switch(
if(async) await LoadFileAsync(ct);
else LoadFileSync();
// … here some more code (either sync or async or whatever)
// Return sthg.
return true;
}
public Task DoSthgAsync(CancellationToken ct)
{
return DoSthgMixed(true, ct);
}
public void DoSthgSync()
{
var task = DoSth.Mixed(false, CancellationToken.None);
var _ignore_result = task.Result;
}
因此,主要原则是,只在异步调用中调用异步方法,并且只在同步调用中调用同步方法。这意味着在同步调用之后获取结果应该是安全的,因为那时没有发生异步调用。
我的问题:如果我这样做,这是否会导致安全行为或存在问题?是否允许调用任务的结果,它不会执行任何异步操作?
我的一般问题是,我有相当长的方法,并尽量避免写两次。