对我来说,它看起来很奇怪,并且像个虫子。
Visual Studio 2019中发布模式下的此代码提供了无限循环。
class Program
{
private static int _a;
static void Main(string[] args)
{
_a = 1;
while (_a == 1)
{
Console.WriteLine(_a);
_a = 0;
}
}
}
Run Code Online (Sandbox Code Playgroud)
volatile或Thread.MemoryBarrier();(之后_a = 0;)解决了问题。别以为我在VS2015中遇到过这样的问题。这是正确的行为吗?优化了哪些确切的部分?
假设我们有这样的代码:
services.AddHttpClient();
services.AddSingleton<IMyService, MyService>();
...
public class MyService : IMyService
{
public MyService(HttpClient httpClient)
{
}
}
Run Code Online (Sandbox Code Playgroud)
有一些问题(可能很愚蠢,但我只是想澄清一些事情):
HttpClientFactory创建 的实例吗HttpClient?HttpClientFactory但在这种情况下,DNS 更改会出现问题吗?目前尚不清楚HttpMessageHandlers 是否会针对单例服务进行管理,以及是否应该对服务进行范围限制以获得HttpClientFactory使用的所有好处。
我需要Include()在 EF Core 选择期间执行多级查询。我将 AutoMapper 与ProjectTo<>().
我已在映射中指定ExplicitExpansion(),这意味着导航属性不会自动填充,因为我希望有可能多次执行相同的查询和一次Include()导航属性,但第二次忽略它。
ProjectTo<>()方法具有参数,允许我将导航属性包含到我的选择中,但我需要执行多级包含。这可能吗?这种语法Include(e => e.Collection.Select(sc => sc.MyProperty))在这种情况下不起作用。
我尝试使用Include().ThenInclude()forDbContext然后执行ProjectTo,但在这种情况下ProjectTo会覆盖我的包含内容并且它们会被忽略。
现在我不确定是否有可能在映射中ProjectTo指定ExplicitExpansion()并具有多级包含?
据我所知,Thread.Sleep(0)只为具有相同或更高优先级的另一个线程提供时间片.我做了一些测试应用:
class Program
{
public static void ThreadMethod()
{
for (int i = 0; i < 300; i++)
{
Thread.Sleep(0);
Console.WriteLine("{0} ThreadProc: {1}, prio {2} ", Thread.CurrentThread.ManagedThreadId,
i, Thread.CurrentThread.Priority);
}
}
public static void Main()
{
Thread.CurrentThread.Priority = ThreadPriority.Normal;
Thread t = new Thread(new ThreadStart(ThreadMethod));
t.Priority = ThreadPriority.Highest;
Thread t2 = new Thread(new ThreadStart(ThreadMethod));
t2.Priority = ThreadPriority.Lowest;
Process.GetCurrentProcess().ProcessorAffinity = (System.IntPtr)1;
t.Start();
t2.Start();
t2.Join();
t.Join();
}
}
Run Code Online (Sandbox Code Playgroud)
这是模拟单核CPU,据我所知这里应该只执行主要具有最高优先级的线程,但我看到:低prio线程不断更改高prio每个操作 
线程互相改变.(当然在开始和结束时有不同的情况,但最高线程应该总是得到更多的时间片)