小编mar*_*v12的帖子

是否可以在 C# 中创建自己的非阻塞异步任务

C# 中的许多内置 IO 函数都是非阻塞的,也就是说,它们在等待操作完成时不会保留线程。

例如System.IO.File.ReadAllLinesAsync返回 aTask<string[]>是非阻塞的。

它不只是暂停正在使用的线程,实际上还释放了该线程,以便其他进程可以使用它。

我认为这是通过调用操作系统来实现的,操作系统在检索文件时回调程序,而程序不必浪费线程等待它。

是否可以自己创建一个非阻塞异步任务?

显然,做类似的事情Thread.sleep()不会像那样释放当前线程System.IO.File.ReadAllLinesAsync

我意识到休眠线程不会占用 CPU 资源,但它仍然占用一个线程,这在处理大量请求的 Web 服务器中可能会出现问题。

我不是在谈论一般如何生成任务。我正在谈论用于处理文件/网络调用的内置 C# 函数如何在等待时释放线程。

c# asynchronous async-await

6
推荐指数
1
解决办法
2144
查看次数

Zeitwerk“弃用警告:初始化自动加载常量”是由在 lib 文件夹中包含一个模块引起的

DEPRECATION WARNING: Initialization autoloaded the constants AuthHelper, SemanticFormHelper, ActionText::ContentHelper, and ActionText::TagHelper

自从升级到 Rails 6 以来,我一直收到有关新 Zeitwerk 自动加载器的警告。

通常这是由在config/initializers文件夹中加载常量引起的,但这里不是这种情况。

AuthHelper并被SemanticFormHelperlib文件夹中的这两个文件拉入:

module AuthorizationSystem
  include AuthHelper
  ...
end
Run Code Online (Sandbox Code Playgroud)
module SemanticFormBuilder
  include SemanticFormHelper
  ...
end
Run Code Online (Sandbox Code Playgroud)

初始化时,文件lib夹中的所有文件都会运行,这些文件中包含的任何内容都会触发DEPRECATION WARNING.

如果我删除这些include语句,警告就会消失,但是应用程序会在某些页面上中断,因为包含是必要的。

如何include在我的lib文件夹中的文件中包含语句而不引起警告?

ActionText::ContentHelper并且ActionText::TagHelper在我的应用程序中无处可寻,所以我想这些警告来自我正在使用的 gem。任何关于如何调试的想法也将不胜感激。

ruby-on-rails deprecation-warning ruby-on-rails-6

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