小编use*_*870的帖子

清洁建筑与洋葱建筑

我一直在阅读洋葱建筑,今天我发现了鲍勃叔叔的清洁建筑.

对于我的生活,我看不出它们之间有任何差异,它们看起来完全相同(除了命名惯例).

这两种建筑风格有什么不同吗?如果是的话,你能解释一下吗?

干杯

architecture onion-architecture clean-architecture

22
推荐指数
3
解决办法
8419
查看次数

从Task.WhenAll获得结果

我有多个任务返回我想要调用的相同对象类型 Task.WhenAll(new[]{t1,t2,t3}); 并读取结果.

当我尝试使用时

Task<List<string>> all = await Task.WhenAll(new Task[] { t, t2 }).ConfigureAwait(false);
Run Code Online (Sandbox Code Playgroud)

我收到编译器错误

无法隐式转换类型'void' 'System.Threading.Tasks.Task<System.Collections.Generic.List<string>>

这两个任务都是类似的调用方法.

private Task<List<string>> GetFiles(string path)
{
    files = new List<string>();
    return  Task.Run(() =>
    {
       //remove for brevity 
        return files;
    });
}
Run Code Online (Sandbox Code Playgroud)

c# task-parallel-library

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

闭包行为

此函数根据其调用方式返回两个不同的值.我理解Closures关闭变量,而不是结束值,我期望从第二次调用返回的值是相同的,无论函数如何被调用

static Func<int, int,int> Sum()
{
    var test = 1;
    return (op1, op2) =>
    {
        test = test + 1;

        return (op1 + op2) + test;
    };
}
Run Code Online (Sandbox Code Playgroud)

这是电话:

var mFunc = Sum();
Console.WriteLine("Calling Sum(1,1) with Invoke() " +   Sum().Invoke(1, 1));
Console.WriteLine("Calling Sum(2,2) with Invoke() " + Sum().Invoke(2, 2));

Console.WriteLine("Calling mFunc(1,1)" + mFunc(1, 1));
Console.WriteLine("Calling mFunc(2,2)" + mFunc(2, 2));
Console.Read();
Run Code Online (Sandbox Code Playgroud)

使用Invoke的结果:

4
6
Run Code Online (Sandbox Code Playgroud)

使用赋值变量的结果:

4
7
Run Code Online (Sandbox Code Playgroud)

为什么使用Invoke会更改闭包行为?

.net c# closures

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

Lazy <T>属性线程安全

我正在读Lazy,我在Msdn docs上看到了这个警告说明

使Lazy对象线程安全不会保护延迟初始化对象.如果多个线程可以访问延迟初始化的对象,则必须使其属性和方法对多线程访问安全.

这是否意味着我们必须对所有属性应用线程安全措施?如果是,那么懒人服务的目的是什么?

谢谢

.net c#

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

Windows窗体中的异步任务不返回结果

有人可以向我解释为什么这段代码不起作用(结果没有分配给文本框的文本属性)

private async Task<string> NumToString(int num)
{

  return await new Task<string>(()=>{
     return  num.ToString();

     });
}
Run Code Online (Sandbox Code Playgroud)

这是电话:

 private async void button2_Click(object sender, EventArgs e)
        {
           // TaskScheduler context = TaskScheduler.FromCurrentSynchronizationContext();
            var content = await NumToString(1);
          textBox1.Text = content;

        }
Run Code Online (Sandbox Code Playgroud)

此外,如果我取消注释TaskScheduler行,则会触发click事件,但NumTostring(1)不会触发.

c# async-await

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