小编Ada*_*sko的帖子

C#在声明后立即使用Lazy.Value

在我工作的公司应用程序中有很多这样的代码:

var something = new Lazy<ISomething>(() =>
                    (ISomething)SomethingFactory
                    .GetSomething<ISomething>(args));

ISomething sth = something.Value;
Run Code Online (Sandbox Code Playgroud)

从我Lazy对此的理解是完全没有意义的,但我是公司的新手,我不想无理由争辩.那么 - 这段代码有什么意义吗?

c# lazy-evaluation

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

Singleton缩短了实施时间

我总是看到像这样实施的单身人士:

public class Singleton
{
    static Singleton instance;
    static object obj = new object();

    public static Singleton Instance
    {
        get
        {
            lock (obj)
            {
                if (instance == null)
                {
                    instance = new Singleton();
                }
                return instance;
            }
        }
    }

    protected Singleton() { }
}
Run Code Online (Sandbox Code Playgroud)

像这样实现它是否有问题:

public class Singleton
{
    static readonly Singleton instance = new Singleton();
    public static Singleton Instance
    {
        get { return instance; }
    }

    protected Singleton() { }
}
Run Code Online (Sandbox Code Playgroud)

?它在第一次实现的同一时刻被初始化,所以我想知道为什么这不是一个流行的解决方案?它应该也更快,因为不需要条件,锁定并且字段被标记为只读,这将使编译器进行一些优化

我们不要谈论单身(反)模式本身

c#

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

具有有限并发性的TaskScheduler会阻塞自身

我正在尝试使用以下自定义任务计划程序来限制并发Web请求:

我这样使用它:

const int CONCURRENCY_LEVEL = 2;

static void Main()
{
    TaskFactory factory = new TaskFactory(new LimitedConcurrencyLevelTaskScheduler(CONCURRENCY_LEVEL));

    Task.WaitAll(new[] { factory.StartNew(() => SomeAction("first")), factory.StartNew(() => SomeAction("second")) });

    Console.WriteLine("All tasks ended");        
    Console.Read();
}

static void SomeAction(string task)
{
    Console.WriteLine(task + " task started");
    Console.WriteLine(AnotherTask(task).Result);
    Console.WriteLine(task + " task ended");
}

static async Task<string> AnotherTask(string task)
{
    return await Task.Run(() =>
    {
        Console.WriteLine(task + " inner task started");
        // imitate web requests
        Thread.Sleep(200);
        Console.WriteLine(task + " inner task ended");
        return "ok"; …
Run Code Online (Sandbox Code Playgroud)

c# multithreading task-parallel-library async-await

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

WPF - DataTrigger动画不起作用

所以我试图在ItemsControl项目删除过程中制作一些动画,ObservableCollectio<Item> 我知道我无法在卸载事件中执行此操作,因为执行任何动画都为时已晚,所以我尝试使用DataTrigger

我的xaml文件看起来像这样:

 <DataTemplate DataType="{x:Type MyApp:Item}">
        <Border x:Name="ItemBorder">
            <Label Content="{Binding Path=Name}" />
        </Border>
        <DataTemplate.Triggers>
            <DataTrigger Binding="{Binding Path=Removing}" Value="True">
                <DataTrigger.EnterActions>
                    <BeginStoryboard>
                        <Storyboard>
                            <DoubleAnimation Duration="0:0:1" From="1.0" To="0.0"
                                           Storyboard.TargetProperty="(Border.Opacity)" />
                        </Storyboard>
                    </BeginStoryboard>
                </DataTrigger.EnterActions>
            </DataTrigger>
        </DataTemplate.Triggers>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)

而我的Item课很简单:

public class Item : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    private bool removing;
    public bool Removing {
        get
        {
            return removing;
        }
        set
        {
            removing = value;
            PropertyChanged(this, new PropertyChangedEventArgs("Removing"));
        }
    }

    // same with `Name` …
Run Code Online (Sandbox Code Playgroud)

c# wpf animation datatrigger

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