从本机代码控制第三方线程

时间:2018-05-18 14:02:11

标签: c# multithreading

我想首先说我绝不是线程专家,因此也就是这个问题的原因。

我有一个自制的抽象记录器,可以调度Task.Run上的日志记录提供程序,如下所示:

 public void Info(string message, Exception exception)
    {
        Task.Run(() =>
        {
            foreach (var p in _providers)
            {
                try
                {
                    p.Info(message, exception);
                }
                catch
                {

                }

            }
        }).ConfigureAwait(false);

    }  

我现在遇到一个奇怪的情况,我的一个日志记录提供程序正在使用一个写入 cosmos db 的外部库,它在内部以异步方式执行此操作。

 public void Debug<T>(string message, T objectToLog)
    {
        var model = GetLogModel(message, toSerialize: objectToLog);

        _logRepo.Create(model); // << this guys is async

        //var s= Task.Run(async () => await _logRepo.Create(model)).Result;
    }  

正如您所看到的,通过注释掉的代码,我目前正在尝试一些时髦的选项来尝试让它同步运行。我知道我可以在没有下面的辅助任务的情况下调用.Result,但这似乎是禁忌。

我的问题是 如何使这个库代码同步运行,而不会无意中导致死锁或其他难以追踪的幻像问题?

0 个答案:

没有答案