我读了这篇文章,了解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)
这将导致死锁,因为:
然后.Result- 操作将在等待异步操作完成时阻止当前线程(即UI线程).
一旦网络调用完成,它将尝试继续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) 我正在开发一个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) 为什么如果我使用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()了哪些内容可以包含模式中的标题,或者这可以不做?
C# 8.0readonly在结构体中引入了成员(如此处所述)。例如,您可以使用以下方法:
public readonly override string ToString() => $"({X}, {Y}) is {Distance} from the origin";
Run Code Online (Sandbox Code Playgroud)
另外,如果你的readonly方法修改了结构的状态,它将无法编译 - 我发现这是非常有用和优雅的解决方案。例如,在下面的示例中,如果X和Y是结构体的属性,则以下方法将无法编译:
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.
引用类型是否有任何限制,使只读方法没有意义?
使用SQL Server/SSRS 2008.
使用SQL Server Profiler,我一直试图跟踪SSRS(rdl)报告生成调用到我的数据库的存储过程失败,即所以我可以看到传递了什么参数值等.
我应该寻找什么事件?
我已经和Java和C#合作了一段时间了,我已经多次问自己这个问题,但是我找不到我想要的答案.
当我必须调用一个对象方法(这意味着它不是静态的)时,我必须通过类的实例来调用,例如:
MyClass myInstance = new MyClass();
myInstance.nonStaticMethod();
Run Code Online (Sandbox Code Playgroud)
我到处都看到这种代码,所以我在考虑一线调用(下面的例子)是否表现出不同的性能,或者仅仅是标准的缘故?
这就是我用单线呼叫的意思:
new MyClass().nonStaticMethod();
Run Code Online (Sandbox Code Playgroud) 我有以下课程
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调用一起工作吗?
谢谢.
有人可以告诉我如何PartialView在点击时加载到同一页面Html.ActionLink.我在下面列出了我的要求.
所有上述步骤都应在不使用MVC5中的Ajax的情况下处理.谁能帮助我实现上述步骤?非常感谢您的帮助
如果集合的名称出现在由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.同样的事情发生IEnumerable在List.
它对代码没有任何影响,不会阻止编译或任何东西.我仍然希望保持我的文件清理,我不认为ReSharper首先应该在注释中解析名称时遇到问题.
我正在使用ReSharper 8.0.任何建议如何解决这个或如何更改我的意见,以摆脱这个"未解决"的警告高度赞赏.
c# ×6
f# ×2
.net ×1
asp.net-mvc ×1
async-await ×1
asynchronous ×1
c#-8.0 ×1
f#-data ×1
java ×1
lambda ×1
oop ×1
readonly ×1
resharper ×1
sql-server ×1
wpf ×1
xaml ×1