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 的制造商都不会将其视为错误。
告诉我 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 的制造商都不会将其视为错误。