我已经搜遍过,但找不到这个问题的答案.据我所知,FileAccess处理机器上的文件访问,FileShare处理共享,但我无法找到它是如何组合以及它们如何相互影响的解释.
例如,如果我有
using ( FileStream fs = new FileStream( pathName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) )
Run Code Online (Sandbox Code Playgroud)
这是否意味着机器上的用户只能读取文件,而远程访问该文件夹的用户可以读取和写入文件?此外,使用会产生什么影响
using ( FileStream fs = new FileStream( pathName, FileMode.Open, FileAccess.Read ) )
Run Code Online (Sandbox Code Playgroud)
我还没有指定FileShare?
我试图理解和之间的区别await Task.CompletedTask,return但似乎找不到任何明确定义的解释。
为什么/什么时候会使用这个:
public async Task Test()
{
    await Task.CompletedTask;
}
Run Code Online (Sandbox Code Playgroud)
在这个?
public async Task Test()
{
    return;
}
Run Code Online (Sandbox Code Playgroud)
我的理解是status,TaskStatus.RanToCompletion虽然我觉得这可能与物理时间有关,但根据Task.FromResult的解释,这两者都有其设定:
当无需执行较长的代码路径即可立即知道任务的返回值时,通常使用该方法。
我在 GitHub 上研究了 MS 代码、MS 文档以及我能找到的每个链接,但没有任何地方给出明确的解释。我还在await Task.CompletedTask更大的方法的末尾看到,根据我在 GitHub 上从MS找到的一些评论,实际上是错误的,因为它不应该包含该内容,他们希望将其从 repo 中清除。
如果也清楚地揭开Task.FromResult(因为他们是兄弟姐妹)的神秘面纱,那将不胜感激,因为我还不清楚何时使用:
public async Task<bool> Test()
{
    return await Task.FromResult(true);
}
Run Code Online (Sandbox Code Playgroud)
在这个:
public async Task<bool> Test()
{
    return true;
}
Run Code Online (Sandbox Code Playgroud) 我知道有很多这些问题,但我找不到与我的问题有关的问题.
看看这个问题,将IF EXIST(SELECT 1 FROM)更改为IF EXIST(SELECT TOP 1 FROM)是否有任何副作用?
在答案中特别提到这一节:
select * from sys.objects
select top 1 * from sys.objects
select 1 where exists(select * from sys.objects)
select 1 where exists(select top 1 * from sys.objects)
Run Code Online (Sandbox Code Playgroud)
我正在运行一些自己的测试来正确理解它.如答案所示:
select 1 where exists(select top 1 * from sys.objects)
select 1 where exists(select top 1 1 from sys.objects)
Run Code Online (Sandbox Code Playgroud)
两者都导致相同的执行计划,并导致相同的计划
select 1 where exists(select * from sys.objects)
select 1 where exists(select 1 from sys.objects)
Run Code Online (Sandbox Code Playgroud)
从我对这个问题的研究,"SELECT TOP 1 1"VS"IF EXISTS(SELECT 1".我推断这是商定的最佳实践:
select …Run Code Online (Sandbox Code Playgroud) 我知道这在"技术上"是这个问题的重复. 我应该推荐默认的密封类吗?
但是我再问一遍,因为显然这个建议已经改变了1次虽然我在过去几年里找不到任何关于它的事情,或者现在越来越多的人推荐AGAINST密封课程,这要归功于改进在测试中(这是主要原因之一),处理器速度(速度差现在可以忽略不计)等.
我正在试图找出最新的天气指南是什么,或者不标记classes为sealed.
1 Essential C#6.0(第5版),Mark Michaelis(合着者Eric Lippert):
"一般来说,将一个类别标记为密封很少进行,并且只应保留那些有充分理由支持这种限制的情况.实际上,离开类型未开封的情况越来越令人满意,因为单元测试因为需要支持模拟(测试双重)对象创建来代替实际的实现."
这是硬拷贝证明,因为其他人都是口口相传.
根据Essential C#6.0,你应该:
AVOID在拥有终结器的拥有对象上调用Dispose().相反,依靠终结队列来清理实例.
Finalizer?Close()/ Close()+ Dispose()?对于非常具体的类型(MemoryStream/ Form/ SqlConnection/ etc),我在网络上看到了很多问题,但我更关注"如何自己解决".根据Dispose Pattern你应该:
除了Dispose()之外,CONSIDER提供方法Close(),如果close是该区域中的标准术语.这样做时,将Close实现与Dispose相同并考虑显式实现IDisposable.Dispose方法非常重要.
但有时候你应该像两个人一样打电话Form等.像" 关闭和处理 - 要打电话的人? "这样的问题越来越接近,但除此之外没有明确的方法
像往常一样答案是:这取决于.不同的类以不同的方式实现IDisposable,由您来做必要的研究.
编辑:这是完整的指南,我没有要求复制许可,但因为它是一个指南(因此假设它应该是自由共享的公共知识)而不是实际培训材料的某些部分,我希望我'我没有违反任何规则.
准则
DO仅对具有稀缺或昂贵资源的对象实施终结器方法,即使最终化延迟了垃圾收集.
实现IDisposable以支持具有终结器的类的确定性终结.
如果没有显式调用Dispose(),请对实现IDisposable的类实现终结器方法.
DO重构一个finalization方法来调用与IDisposable相同的代码,也许只是调用Dispose()方法.
不要从终结器方法中抛出异常.
从Dispose()调用System.GC.SuppressFinalize()以避免重复资源清理并延迟对象上的垃圾回收.
确保Dispose()是幂等的(应该可以多次调用Dispose()).
保持Dispose()简单,专注于最终化所需的资源清理.
AVOID在拥有终结器的拥有对象上调用Dispose().相反,依靠终结队列来清理实例.
避免引用在最终确定期间未完成的其他对象.
在重写Dispose()时,请调用基类的Dispose()方法.
在调用Dispose()之后,考虑确保对象变得不可用.在处理了一个对象之后,Dispose()以外的方法(可能被多次调用)应抛出一个ObjectDisposedException.
在具有一次性字段(或属性)的类型上实现IDisposable并处理所述实例.
我试图了解该AllowedForNewUsers财产的目的是什么。该文件指出它:
获取或设置一个标志,指示是否可以锁定新用户。默认为真。
但这根本没有告诉我任何有用的东西,从表面上看,这意味着可以锁定新用户,但这简直是荒谬的,因为您已经拥有标准的锁定功能。
我什至检查了Git更改日志的实施时间,但这也无济于事。
    /// Gets or sets a flag indicating whether users can be locked out after creation.
    /// </summary>
    /// <value>
    /// True if a newly created user can be locked out, otherwise false.
    /// </value>
    /// <remarks>
    /// Defaults to true.
    /// </remarks>
    public bool AllowedForNewUsers { get; set; } = true;
Run Code Online (Sandbox Code Playgroud)
任何指导将不胜感激。
我不知道我是否遗漏了这个难题的一部分,但就我习惯使用一般服务而言,任何对服务的调用都Start应该总是返回,以便您知道您的服务已经启动。
我正在学习BackgroundService:
ASP.NET Core 中托管服务的后台任务
使用 IHostedService 和 BackgroundService 类在微服务中实现后台任务
在这两个示例中,它们正在实现ExecuteAsync(由 调用StartAsync),使用的while loop含义是ExecuteAsync(并且通过扩展StartAsync)只有在取消时(例如应用程序关闭时)才会返回。
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
{
    while (!stoppingToken.IsCancellationRequested)
    {
        _logger.LogDebug($"GracePeriod task doing background work.");
        // This eShopOnContainers method is querying a database table
        // and publishing events into the Event Bus (RabbitMQ / ServiceBus)
        CheckConfirmedGracePeriodOrders();
        await Task.Delay(_settings.CheckUpdateTime, stoppingToken);
    }
}
Run Code Online (Sandbox Code Playgroud)
这与我对服务的理解相矛盾,因为你如何判断服务已成功启动还是在启动时挂起?
我真的很感激对此有一些澄清,因为我似乎无法理解正在发生的事情,而且我似乎无法找到任何具体于此的进一步信息。
编辑:添加了对ExecuteAsyncfrom 的调用BackgroundService以进行说明:
public virtual Task StartAsync(CancellationToken …Run Code Online (Sandbox Code Playgroud) c# task-parallel-library asp.net-core c#-8.0 asp.net-core-3.1
我到处搜索但找不到答案,你能设置变量的排序规则吗?根据MS 文档,似乎只能在 SQL Azure 上实现:
-- Azure SQL 数据仓库和并行数据仓库的语法
DECLARE
{{ @local_variable [AS] data_type } [ =value [ COLLATE ] ] } [,...n]
目前我必须这样做:
DECLARE @Test nvarchar(10) = N'Crud';
IF ( @Test = N'Crud' COLLATE Latin1_General_CS_AI )
    Print N'Crud';
IF ( @Test = N'cRud' COLLATE Latin1_General_CS_AI )
    Print N'cRud';
IF ( @Test = N'crUd' COLLATE Latin1_General_CS_AI )
    Print N'crUd';
IF ( @Test = N'cruD' COLLATE Latin1_General_CS_AI )
    Print N'cruD';
Run Code Online (Sandbox Code Playgroud)
当我想做的是这样的时候:
DECLARE @Test nvarchar(10) = N'Crud' COLLATE Latin1_General_CS_AI;
IF …Run Code Online (Sandbox Code Playgroud) 我确信这必须在某个地方得到回答,但对于我的生活,无论我如何更改搜索词组,我似乎都找不到任何东西。
我需要从两个完全独立的表中选择数据并将信息导出到 JSON。在这种情况下,它们在每个表中都是 1 条记录。
如果我一次只选择 1 个并导出到 JSON,它们是 1 个记录,但是当我在 SQL 中加入两个单个记录然后导出到 JSON 时,它们是 1 个记录数组。
仅 1 条记录 SQL 输入:
DECLARE @Json nvarchar(max) = 
(   
    SELECT 'Data1' AS [Data1], 'Data2' AS [Data2]
    FOR JSON PATH
    , INCLUDE_NULL_VALUES
    , WITHOUT_ARRAY_WRAPPER
);
SELECT @Json;
GO
Run Code Online (Sandbox Code Playgroud)
只有 1 条记录 JSON 输出(注意没有数组):
{
  "Data1": "Data1",
  "Data2": "Data2"
}
Run Code Online (Sandbox Code Playgroud)
2 记录 SQL 输入:
DECLARE @Json nvarchar(max) = 
(   
    SELECT
    (
        SELECT 'Data1' AS [Data1], 'Data2' AS [Data2]
        FOR JSON PATH
        , INCLUDE_NULL_VALUES
    ) …Run Code Online (Sandbox Code Playgroud) 我有一个简单的委托、事件和属性,允许我在事件上创建回调订阅:
public static class Test
{
    /// <summary>Delegate for property changed event</summary>
    public delegate void TestEventHandler();
    /// <summary>Event called when value is changed</summary>
    public static event TestEventHandler OnTestHappening;
    /// <summary>Property to specify our test is happening</summary>
    private static bool testHappening;
    public static bool TestHappening
    {
        get
        {
            return testHappening;
        }
        set
        {
            testHappening = value;
            // Notify our value has changed only if True
            // ie. Only fire an event when we're ready as we'll hook methods to the Event …Run Code Online (Sandbox Code Playgroud) 我肯定答案是肯定的,但我很好奇,并且以为我会问你的女朋友.
在SQL中你可以说:
IF ( a IN ( x, y ) )
Run Code Online (Sandbox Code Playgroud)
C#中有类似的东西吗?我知道你可以使用一个开关,但我正在寻找if语句中特别可能的东西,因为有多个表达式,如:
IF ( a == b && c IN ( x, y ) )
IF ( a == b && c == ( x || y ) )
Run Code Online (Sandbox Code Playgroud)
编辑:好的,我看到我过于简单,因为数组示例相当明显,我没有想到它.如果它是更复杂的东西怎么样:
if ( a.GetType() == typeof( MyClass1 ) || a.GetType() == typeof( MyClass2 ) )
Run Code Online (Sandbox Code Playgroud)
Edit2:只是为了澄清,这不是一个C#IN运算符的副本吗?因为这个问题的答案并没有解决我的问题,因为我使用的例子可能有点差,但这是我当时唯一能想到的关系.Palani Kumar提供的答案就是我正在寻找的答案.
编辑3:感谢所有人的称重.很明显,有很多方法可以达到相同的结果(我现在也明白,它们几乎是同样的东西,只是表达方式不同)而且我已经能够阅读了由于您的意见,进一步进入每一个.我也设法找到这个"如果语句匹配多个值"的帖子,是的,我完全同意它也是我所要求的重复.根据反馈,我不仅学到了很多东西,还设法实现了一个优雅的解决方案:
public static bool In<T>( this T obj, params T[] list )
{
    return list.Contains( obj …Run Code Online (Sandbox Code Playgroud) c# ×7
sql-server ×3
t-sql ×3
c#-8.0 ×2
asp.net-core ×1
async-await ×1
callback ×1
class ×1
delegates ×1
dispose ×1
events ×1
filestream ×1
finalizer ×1
if-statement ×1
json ×1
sealed ×1