小编Ham*_*jam的帖子

如何同步运行异步Task <T>方法?

我正在学习async/await,并遇到了需要同步调用异步方法的情况.我怎样才能做到这一点?

异步方法:

public async Task<Customers> GetCustomers()
{
    return await Service.GetCustomersAsync();
}
Run Code Online (Sandbox Code Playgroud)

正常使用:

public async void GetCustomers()
{
    customerList = await GetCustomers();
}
Run Code Online (Sandbox Code Playgroud)

我尝试过使用以下内容:

Task<Customer> task = GetCustomers();
task.Wait()

Task<Customer> task = GetCustomers();
task.RunSynchronously();

Task<Customer> task = GetCustomers();
while(task.Status != TaskStatus.RanToCompletion)
Run Code Online (Sandbox Code Playgroud)

我也从这里尝试了一个建议,但是当调度程序处于暂停状态时它不起作用.

public static void WaitWithPumping(this Task task) 
{
        if (task == null) throw new ArgumentNullException(“task”);
        var nestedFrame = new DispatcherFrame();
        task.ContinueWith(_ => nestedFrame.Continue = false);
        Dispatcher.PushFrame(nestedFrame);
        task.Wait();
}
Run Code Online (Sandbox Code Playgroud)

以下是调用的异常和堆栈跟踪RunSynchronously:

System.InvalidOperationException

消息:可能无法在未绑定到委托的任务上调用RunSynchronously.

InnerException:null

资料来源:mscorlib …

c# asynchronous async-await c#-5.0

606
推荐指数
16
解决办法
36万
查看次数

'static'关键字在一个类中做什么?

具体来说,我正在尝试这段代码:

package hello;

public class Hello {

    Clock clock = new Clock();

    public static void main(String args[]) {
        clock.sayTime();
    }
}
Run Code Online (Sandbox Code Playgroud)

但它给出了错误

无法访问静态方法main中的非静态字段

所以我把声明改为clock:

static Clock clock = new Clock();
Run Code Online (Sandbox Code Playgroud)

它奏效了.在声明之前放置该关键字是什么意思?对于该对象可以做什么,它究竟会做什么和/或限制什么?

java oop static language-features restriction

432
推荐指数
16
解决办法
80万
查看次数

将ArrayList转换为字符串的最佳方法

我有一个ArrayList我想完全输出为String.基本上我想按顺序输出它,使用toString由制表符分隔的每个元素.有没有快速的方法来做到这一点?你可以循环它(或删除每个元素)并将它连接到一个字符串,但我认为这将是非常缓慢的.

java string arraylist

353
推荐指数
17
解决办法
101万
查看次数

int []数组和int数组[]之间的区别

我最近一直在考虑定义数组的两种方法之间的区别:

  1. int[] array
  2. int array[]

有区别吗?

java arrays

226
推荐指数
12
解决办法
7万
查看次数

计算两个日期之间的月份差异

在C#/.NET TimeSpanTotalDays,TotalMinutes等等,但我无法弄清楚总月差的公式.每月可变天数和闰年一直让我失望.我如何获得TotalMonths

编辑抱歉没有更清楚:我知道我实际上无法得到这个,TimeSpan但我想使用TotalDays,TotalMinutes并将是一个很好的例子来表达我正在寻找...除了我想要得到总月.

示例:2009年12月25日 - 2009年10月6日= 2 TotalMonths.10月6日至11月5日等于0个月.11月6日,1个月.12月6日,2个月

.net c# datetime timespan

121
推荐指数
6
解决办法
13万
查看次数

不能将String.Empty用作可选参数的默认值

我正在阅读Bill Wagner的Effective C#.在第14项 - 最小化重复初始化逻辑中,他显示了以下在构造函数中使用新的可选参数功能的示例:

public MyClass(int initialCount = 0, string name = "")

请注意,他使用""而不是string.Empty.
他评论道:

您将注意到[在上面的示例中]第二个构造函数为name参数指定了默认值,而不是更常用的string.Empty.那是因为string.Empty它不是编译时常量.它是字符串类中定义的静态属性.因为它不是编译常量,所以不能将它用作参数的默认值.

如果我们不能string.Empty在所有情况下使用静态,那么这不是打败了它的目的吗?我认为我们会用它来确保我们有一个独立于系统的方法来引用空字符串.我的理解错了吗?谢谢.

更新
只是后续评论.根据MSDN:

每个可选参数都有一个默认值作为其定义的一部分.如果没有为该参数发送参数,则使用默认值.默认值必须是常量.

然后我们无法使用它们System.Environment.NewLine,或者使用新实例化的对象作为默认值.我还没有用过VS2010,这太令人失望了!

c# optional-parameters c#-4.0

87
推荐指数
4
解决办法
4万
查看次数

为什么在循环期间追加TextBox.Text会在每次迭代时占用更多内存?

简短的问题

我有一个运行180,000次的循环.在每次迭代结束时,它应该将结果附加到TextBox,TextBox是实时更新的.

使用MyTextBox.Text += someValue导致应用程序占用大量内存,并且在几千条记录之后它耗尽了可用内存.

是否有更有效的方式将文本附加到TextBox.Text180,000次?

编辑我真的不关心这个特定情况的结果,但我想知道为什么这似乎是一个记忆猪,并且如果有一种更有效的方法将文本附加到TextBox.


长(原始)问题

我有一个小应用程序,它读取CSV文件中的ID号列表,并为每个应用程序生成PDF报告.生成每个pdf文件后,ResultsTextBox.Text将附加到已处理的报告的ID号以及已成功处理的报告的ID号.该进程在后台线程上运行,因此ResultsTextBox会在项处理时实时更新

我目前正在针对180,000个ID号运行该应用程序,但是应用程序占用的内存随着时间的推移呈指数级增长.它从大约90K开始,但是大约3000条记录占用大约250MB,而4000条记录占用大约500 MB的内存.

如果我注释掉结果文本框的更新,内存保持相对静止大约90K,所以我可以假设写作ResultsText.Text += someValue是导致它吃内存的原因.

我的问题是,这是为什么?将数据附加到不吃内存的TextBox.Text的更好方法是什么?

我的代码看起来像这样:

try
{
    report.SetParameterValue("Id", id);

    report.ExportToDisk(ExportFormatType.PortableDocFormat,
        string.Format(@"{0}\{1}.pdf", new object[] { outputLocation, id}));

    // ResultsText.Text += string.Format("Exported {0}\r\n", id);
}
catch (Exception ex)
{
    ErrorsText.Text += string.Format("Failed to export {0}: {1}\r\n", 
        new object[] { id, ex.Message });
}
Run Code Online (Sandbox Code Playgroud)

还应该值得一提的是,该应用程序是一次性的事情,并不需要花费几个小时(或几天:)来生成所有报告.我主要担心的是,如果它达到系统内存限制,它将停止运行.

我没关系更新结果TextBox注释掉来运行这个东西,但我想知道是否有一种更有效的内存方式将数据附加到TextBox.Text未来的项目中.

c# wpf

82
推荐指数
4
解决办法
5508
查看次数

如何找到2D阵列的大小?

如果我声明这个数组......

string[,] a = {
                  {"0", "1", "2"},
                  {"0", "1", "2"},
                  {"0", "1", "2"},
                  {"0", "1", "2"},
              };
Run Code Online (Sandbox Code Playgroud)

然后我可以测量长度

a.Length
Run Code Online (Sandbox Code Playgroud)

这是12.如何测量阵列的尺寸?如果我试试......

a[0].Length
Run Code Online (Sandbox Code Playgroud)

我得到Wrong number of indices inside []; expected 2.是什么赋予了?

.net c# arrays multidimensional-array

79
推荐指数
3
解决办法
8万
查看次数

使用uint vs int

我已经观察了一段时间C#程序员倾向于在任何地方使用int,并且很少使用uint.但我从来没有找到一个令人满意的答案为什么.

如果您的目标是互操作性,则uint不应出现在公共API中,因为并非所有CLI语言都支持无符号整数.但这并不能解释为什么int如此普遍,即使在内部课程中也是如此.我怀疑这是因为在BCL中谨慎使用uint的原因.

在C++中,如果你有一个负值没有意义的整数,你选择一个无符号整数.

这清楚地表明不允许或不期望负数,编译器会为您做一些检查.我还怀疑在数组索引的情况下,JIT可以轻松地删除下限检查.

但是,在混合int和单位类型时,需要额外的护理和演员表.

是否应该使用更多?为什么?

c#

78
推荐指数
5
解决办法
4万
查看次数

如何测量C中的时间?

我想知道一些代码块执行了多长时间.像这样的东西:

startStopwatch();
// do some calculations
stopStopwatch();
printf("%lf", timeMesuredInSeconds);
Run Code Online (Sandbox Code Playgroud)

怎么样?

c windows time winapi

41
推荐指数
4
解决办法
6万
查看次数