小编inn*_*227的帖子

7
推荐指数
1
解决办法
490
查看次数

blazor 组件何时渲染?

在此页面的下图中,它显示当调用 OnInitializedAsync 返回未完成的任务时,它将等待该任务,然后渲染组件。

然而,当返回未完成的任务时,实际发生的情况似乎是立即渲染组件,然后在未完成的任务完成后再次渲染它。

在此输入图像描述

该页面后面的一个示例似乎证实了这一点。如果组件在调用 OnInitializedAsync 之后没有立即呈现,而是仅在返回的任务完成后第一次呈现,您将永远不会看到“正在加载...”消息。

OnParametersSetAsync 行为看起来相同。当返回未完成的任务时,它立即渲染一次,然后在该任务完成后再次渲染。

我是否误解了渲染生命周期,或者这是文档中的错误?

谢谢

@page "/fetchdata"
@using BlazorSample.Data
@inject WeatherForecastService ForecastService

<h1>Weather forecast</h1>

<p>This component demonstrates fetching data from a service.</p>

@if (forecasts == null)
{
    <p><em>Loading...</em></p>
}
else
{
    <table class="table">
        <!-- forecast data in table element content -->
    </table>
}

@code {
    private WeatherForecast[]? forecasts;

    protected override async Task OnInitializedAsync()
    {
        forecasts = await ForecastService.GetForecastAsync(DateTime.Now);
    }
}
Run Code Online (Sandbox Code Playgroud)

rendering async-await blazor blazor-webassembly

7
推荐指数
2
解决办法
2450
查看次数

具有异步等待的全局互斥体

我有一个关键的代码段,一次只能由一个进程运行.为确保机器上只有一个进程运行此关键块,我使用全局互斥锁.关键部分中的代码使用async/await.总体而言,代码看起来像这样:

var mutex = new Mutex(false, @"Global\MyMutexName");    
mutex.WaitOne(-1, false);   
SetupASystemWideResource() 
await DoSomeAsyncWorkOnThatResource();    
mutex.ReleaseMutex();
Run Code Online (Sandbox Code Playgroud)

问题是await之后的代码可能发生在不同的线程上.因此,互斥体可以在与获取的不同的线程上发布.这会导致异常

System.ApplicationException: Object synchronization method was called from an unsynchronized block of code.
Run Code Online (Sandbox Code Playgroud)

通常这会使你因为你不想要一个不同的线程释放互斥锁而不是获取它.但是在我的情况下,我真的只想防止应用程序的第二个实例在第一个实例使用它时以不同的方式设置系统资源.资源本身可以在一个实例中的多个线程中使用.

确保这一点并以异步方式完成工作的正确方法是什么?

c# mutex async-await

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

字典更新线程安全

以下代码线程是否安全?

var dict = new Dictionary<int, string>()
    { { 0, "" }, { 1, "" }, { 2, "" }, { 3, "" } };

var nums = dict.Keys.ToList();

Parallel.ForEach(nums, num =>
            {
                dict[num] = LongTaskToGenerateString();
            });

return dict;
Run Code Online (Sandbox Code Playgroud)

c# dictionary thread-safety

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

CLR识别线程

此页面http://msdn.microsoft.com/en-us/library/zf749bat(v=vs.110).aspx讨论了CLR报告的不同线程编号:物理,逻辑和已识别.

有人可以解释一下线程被CLR"识别"的意义吗?

为什么会使我认可的线程最大值为2,而物理和逻辑线程都在30s?

.net clr performance multithreading

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

没有 CS0184 警告不可能检查

为什么本示例中的 testB不像 testA 那样给出“警告 CS0184:给定的表达式永远不是提供的 ('MyClass2') 类型”?

class Program
{
    void Main()
    {
        var a = new MyClass1();
        var b = (IMyInterface)new MyClass1();
        
        //Get a CS0184 Warning on this line
        var testA = a is MyClass2;
        
        //No warning on this line
        var testB = b is MyClass2;
                
    }
}

interface IMyInterface
{
}

class MyClass1 : IMyInterface
{
}

class MyClass2
{
}
Run Code Online (Sandbox Code Playgroud)

c# compiler-warnings roslyn

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