小编Pio*_*ski的帖子

等待和僵局预防 - 澄清?

我读了这篇文章,了解Task.ConfigureAwait哪些可以帮助防止异步代码中的死锁.

看看这段代码:( 我知道我不应该这样做.Result,但这是问题的一部分)

private void Button_Click(object sender, RoutedEventArgs e)
{
    string result = GetPageStatus().Result;
    Textbox.Text = result;
}
public async Task<string> GetPageStatus()
{
    using (var httpClient = new HttpClient())
    {
        var response = await httpClient.GetAsync("http://www.google.com");
        return response.StatusCode.ToString();
    }
}
Run Code Online (Sandbox Code Playgroud)

这将导致死锁,因为:

  1. 然后.Result- 操作将在等待异步操作完成时阻止当前线程(即UI线程).

  2. 一旦网络调用完成,它将尝试继续response.StatusCode.ToString()在捕获的上下文上执行- 方法.(被封锁 - 因此死锁).

一种解决方案是使用:

var response = await httpClient.GetAsync("http://www.google.com").ConfigureAwait(false);

但其他解决方案是一直异步(没有阻塞):

/*1*/   private async void Button_Click(object sender, RoutedEventArgs e)
/*2*/   {
/*3*/       string result = await GetPageStatus(); …
Run Code Online (Sandbox Code Playgroud)

.net c# task-parallel-library async-await

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

验证ItemsControl中的项目

我正在开发一个WPF应用程序,在一个窗口中我使用了WPF工具包中的向导组件.在这个向导中,我正在创建一个新人.在第二步中,我使用枚举作为可能的联系类型的来源(例如电话,电子邮件......).

这是我在XAML中的向导页面:

<xctk:WizardPage x:Name="NewContactPage" PageType="Interior"
                Title="Contacts" Style="{DynamicResource NewContactPage}"
                CanCancel="True" CanFinish="False"
                Loaded="NewContactPage_Loaded" 
                PreviousPage="{Binding ElementName=NewPersonPage}">
    <Grid HorizontalAlignment="Stretch" VerticalAlignment="Top">
        <control:DataLoader x:Name="ctrNewContactLoader" />
        <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Top" Orientation="Vertical">
            <ItemsControl ItemsSource="{Binding Path=Person.PersonContacts, Mode=TwoWay,
                                                            RelativeSource={RelativeSource Mode=FindAncestor,
                                                                                           AncestorType=Window}}"
                                      Name="icContacts">
                <ItemsControl.ItemTemplate>
                    <ItemContainerTemplate>
                        <StackPanel HorizontalAlignment="Stretch" VerticalAlignment="Top" Orientation="Vertical"


                        Margin="5" Background="WhiteSmoke">
                        <CheckBox IsChecked="{Binding Path=IsValid}" 
                                              Content="{Binding Path=ContactType.Description}"
                                              Name="cbContactVisible"/>

                        <Grid HorizontalAlignment="Stretch" VerticalAlignment="Top"
                                          Visibility="{Binding ElementName=cbContactVisible, Path=IsChecked, 
                                                               Converter={StaticResource BooleanToVisibilityConverter}}">
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*" />
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="auto" />
                            </Grid.RowDefinitions>

                            <TextBox Grid.Row="0" Grid.Column="0"
                                                 HorizontalAlignment="Stretch" MaxLength="64"
                                                 Name="txtContactValue"
                                                 Text="{Binding Path=Contact,
                                                        ValidatesOnDataErrors=True,
                                                        ValidatesOnNotifyDataErrors=True,
                                                        ValidatesOnExceptions=True}" />
                        </Grid>
                    </StackPanel>
                </ItemContainerTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl> …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml

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

我可以在不提供样本的情况下使用CsvProvider编写标题吗?

为什么如果我使用CsvProvider<>F#创建一个新的CSV类型,如下所示:

type ThisCsv = CsvProvider<Schema = "A (decimal), B (string), C (decimal)", HasHeaders = false>
Run Code Online (Sandbox Code Playgroud)

然后创建/填充/保存.csv,生成的文件不包含我指定的架构中的标头?似乎应该有一种方法在最终的.csv文件中包含标题,但事实并非如此.

设置HasHeaders = true错误,因为没有提供样本.工作的唯一方法HasHeaders = true是获得样本.csv.在我看来,应该有一种方法来指定没有样本的模式,并在最终文件中包含标头.

我在使用时遗漏[nameOfMyCSV].Save()了哪些内容可以包含模式中的标题,或者这可以不做?

f# f#-data

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

为什么结构体中的只读成员而不是类中的只读成员

C# 8.0readonly在结构体中引入了成员(如此处所述。例如,您可以使用以下方法:

public readonly override string ToString() => $"({X}, {Y}) is {Distance} from the origin";
Run Code Online (Sandbox Code Playgroud)

另外,如果你的readonly方法修改了结构的状态,它将无法编译 - 我发现这是非常有用和优雅的解决方案。例如,在下面的示例中,如果XY是结构体的属性,则以下方法将无法编译:

public readonly void Translate(int xOffset, int yOffset)
{
    X += xOffset;
    Y += yOffset;
}
Run Code Online (Sandbox Code Playgroud)

同样,这是表达代码意图的非常有用且优雅的方式。

那么为什么只能使用结构而不是类呢?如果我尝试添加readonly到类中的方法,我会收到编译器错误:The modifier 'readonly' is not valid for this item.

引用类型是否有任何限制,使只读方法没有意义?

c# readonly c#-8.0

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

SQL Server Profiler:在SSRS报告生成期间捕获对数据库的存储过程的调用

使用SQL Server/SSRS 2008.

使用SQL Server Profiler,我一直试图跟踪SSRS(rdl)报告生成调用到我的数据库的存储过程失败,即所以我可以看到传递了什么参数值等.

我应该寻找什么事件?

sql-server sql-server-profiler reporting-services

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

使用内联对象方法调用与声明新变量

我已经和Java和C#合作了一段时间了,我已经多次问自己这个问题,但是我找不到我想要的答案.

当我必须调用一个对象方法(这意味着它不是静态的)时,我必须通过类的实例来调用,例如:

MyClass myInstance = new MyClass();
myInstance.nonStaticMethod();
Run Code Online (Sandbox Code Playgroud)

我到处都看到这种代码,所以我在考虑一线调用(下面的例子)是否表现出不同的性能,或者仅仅是标准的缘故?

这就是我用单线呼叫的意思:

new MyClass().nonStaticMethod();
Run Code Online (Sandbox Code Playgroud)

c# java oop

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

异步lambda并不能隐式地将Task.Task.List <Object>转换为List <Object>

我有以下课程

public PhoneModel
{
    int PhoneID;
    string PhoneType;
    string PhoneNumber;
}
public ContactModel 
{
    int ContactID;
    string FirstName;
    string LastName;
    List<PhoneModel> PhoneNumber;
}
Run Code Online (Sandbox Code Playgroud)

我需要显示每个联系人的所有电话号码的联系人列表.

var contactList = await ContactBLL.GetContactList();
IEnumerable<ContactViewModel> contacts = contactList.ToList().ConvertAll(
    async c => new ContactViewModel
    {
        phones = (await ContactBLL.GetContactPhones(c.ContactID)).ToList(),
        firstName = c.FirstName, 
        lastName = c.LastName
    });
Run Code Online (Sandbox Code Playgroud)

我目前得到编译错误说"不能隐式转换类型'System.Threading.Tasks.Task.List到IEnumerable ...."然而,没有async电话获取电话列表,它将工作(当然没有电话).我可以将async功能更改GetContactPhones()为同步功能,它将按预期工作.我的问题是有一种方法可以使上面的代码与async调用一起工作吗?

谢谢.

c# lambda asynchronous

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

如何在单击Html.ActionLink时加载局部视图?

有人可以告诉我如何PartialView在点击时加载到同一页面Html.ActionLink.我在下面列出了我的要求.

  1. 我有一个Index页面,它将列出Employee表中的员工,表中的每一行都有Edit&Delete链接(Html.ActionLink)来更新/删除员工信息.
  2. 此外,索引页面将具有文本框的部分视图,以创建新员工(或)编辑现有员工.
  3. 当用户从表中选择"编辑"链接时,必须在部分视图的文本框中加载相应的用户详细信息以更新员工详细信息.
  4. 此外,在部分视图中输入的新员工详细信息应存储到数据库表中,同时应将其添加到"索引"页面的表中.

所有上述步骤都应在不使用MVC5中的Ajax的情况下处理.谁能帮助我实现上述步骤?非常感谢您的帮助

asp.net-mvc asp.net-mvc-partialview asp.net-mvc-5

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

ReSharper无法解析注释中的集合类型

如果集合的名称出现在由cref属性引用的方法描述中,则ReSharper无法解析该集合的名称.

例如,在这个签名中,ReSharper强调了这个词Dictionary:

/// <summary>
/// The reconstruct in single account.
/// </summary>
/// <param name="programId">
/// The program id.
/// </param>
/// <returns>
/// The <see cref="Dictionary"/>.   // <-- here the "Dictionary" is underlined
/// </returns>
Dictionary<long, Account> ReconstructInSingleAccount(long programId)
{

}
Run Code Online (Sandbox Code Playgroud)

当我将鼠标悬停在突出显示的区域时Cannot resolve symbol 'Dictionary'.该文件有一个引用System.Collections.Generic.同样的事情发生IEnumerableList.

它对代码没有任何影响,不会阻止编译或任何东西.我仍然希望保持我的文件清理,我不认为ReSharper首先应该在注释中解析名称时遇到问题.

我正在使用ReSharper 8.0.任何建议如何解决这个或如何更改我的意见,以摆脱这个"未解决"的警告高度赞赏.

c# resharper

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

F#有办法打印表达式的类型吗?

我正在寻找道德等同于ghci:

Prelude> :t 1 + 2
1 + 2 :: Num a => a
Run Code Online (Sandbox Code Playgroud)

f#

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