MediaTypeHeaderValue class 是线程安全的吗?

Is the MediaTypeHeaderValue class thread-safe?

告诉我 MediaTypeHeaderValue class 是线程安全的?有条件的我可以这样用:

public class MyClass 
{
    // example
    private static readonly MediaTypeHeaderValue mediaType 
        = MediaTypeHeaderValue.Parse("application/octet-stream");

    // the method can be called from different threads
    public void Execute() 
    {
        // Use MediaTypeHeaderValue like
        // HttpRequestMessage request = ...
        // ...
        // request.Content.Headers.ContentType = mediaType; // <---
        // ...
    }
}

避免每次都创建实例,从而减少GC的负载?

这取决于你用它做什么。如果你只是阅读它,就像你在代码注释中显示的那样,那么它应该没问题。如果您开始改变 header(例如通过更改 MediaType 属性 的值),那么所有赌注都将关闭。

一般来说,公理是:线程安全是显式的,非线程安全是隐含的。这意味着要么文档明确声明 class 是线程安全的,要么没有做出这样的声明,在这种情况下,您应该假设 class 不是线程安全的。非线程安全意味着从多个线程同时访问 class 的成员会导致未定义的行为。未定义的行为意味着“任何事情”都可能发生,如果您不喜欢它,您将无法提交错误报告,因为无论发生什么,class 的制造商都不会将其视为错误。