在一种方法中将C#async和“sync”代码一起写入

时间:2016-04-04 09:06:16

标签: c# asynchronous synchronous

我的目标是两种方法:

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;
}

因此,主要原则是,只在异步调用中调用异步方法,并且只在同步调用中调用同步方法。这意味着在同步调用之后获取结果应该是安全的,因为那时没有发生异步调用。

我的问题:如果我这样做,这是否会导致安全行为或存在问题?是否允许调用任务的结果,它不会执行任何异步操作?

我的一般问题是,我有相当长的方法,并尽量避免写两次。

0 个答案:

没有答案