小编How*_*ard的帖子

c#在异步方法中阻塞代码

我在Windows 10(UWP)应用程序中使用MvvmCross和AsyncEx库.

在ViewModel中,我有一个INotifyTaskCompletion属性(1),它连接到ViewModel中的Async方法(2)

在(2)中,我调用了一个Async库方法:

  • 检查本地缓存
  • 异步下载数据
  • 将数据添加到缓存

缓存代码不能异步,因此库方法包含阻塞代码和异步代码.

问:防止阻止UI线程的最佳方法是什么?

我从Stephen Cleary了解到,不要阻止异步代码,也不要在库方法中使用Task.Run.所以我必须......

将缓存调用移动到(2)例如

  • 使用Task.Run(检查缓存)
  • 异步调用库方法
  • 再次使用Task.Run(缓存数据)?

有没有更好的办法?

c# asynchronous async-await win-universal-app

5
推荐指数
1
解决办法
2462
查看次数

Serilog - 覆盖配置值

我正在构建 Windows 10 应用程序 (UWP) 并使用 Serilog 实现日志记录。

\n\n

下面显示的是一个 appsettings.json 文件,我用它配置 Serilog 以写入滚动文件接收器(以及其他接收器)。

\n\n
{\n  "Serilog": {\n    "Using": [ "Serilog.Sinks.Console" ],\n    "MinimumLevel": "Debug",\n    "WriteTo": [\n      { "Name": "Console" },\n      {\n        "Name": "RollingFile",\n        "Args": {\n          "pathFormat": "#{LogFilePath}log-{Date}.txt",\n          "fileSizeLimitBytes": "3000",\n          "retainedFileCountLimit": "2"\n        }\n      }      \n    ],\n    "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ],\n    "Properties": {\n      "Application": "Sample"\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我调用以下代码:

\n\n
 var configuration = new ConfigurationBuilder()                        \n        .AddJsonFile(sampleFile.Path)\n        .Build();\n\n    Log.Logger = new LoggerConfiguration()\n        .ReadFrom.Configuration(configuration)\n        .CreateLogger();\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,我需要能够在运行时更改 pathFormat 属性,以便将日志写入 application\xe2\x80\x99s \xe2\x80\x9cLocalState\xe2\x80\x9d …

c# serilog

4
推荐指数
1
解决办法
1万
查看次数