b6805a94a3
This is some next-level race condition, so for those interested: - Concurrent collections are thread-safe in a way that each operation is atomic - Naturally if you call two atomic operations in a row, the result is no longer atomic, since there could be some changes between the first and the last - Certain LINQ operations such as OrderBy(), Reverse(), ToArray(), among more, use internal buffer for operation with certain optimization that checks if input is ICollection, if yes, it calls Count and CopyTo(), for OrderBy in this example - In result, such LINQ call is not guaranteed to be thread-safe, since it assumes those two calls to be atomic, while they're not in reality. This issue is quite hard to spot in real applications, since it's not that easy to trigger it (you need to call the operation on ICollection and then have another thread modifying it while enumerating). This is probably why we've never had any real problem until I've discovered this madness with @Aareksio in entirely different project. As a workaround, we'll explicitly convert some ICollection inputs to IEnumerable, in particular around OrderBy(), so the optimization is skipped and the result is not corrupted. I've added unit tests which ensure this workaround works properly, and you can easily reproduce the problem by removing AsLinqThreadSafeEnumerable() in them. See https://github.com/dotnet/runtime/discussions/50687 for more insight I have no clue who thought that ignoring this issue is a good idea, at the very least concurrent collections should have opt-out mechanism from those optimizations, there is no reason for them to not do that. |
||
---|---|---|
.github | ||
ArchiSteamFarm | ||
ArchiSteamFarm.CustomPlugins.ExamplePlugin | ||
ArchiSteamFarm.CustomPlugins.PeriodicGC | ||
ArchiSteamFarm.CustomPlugins.SignInWithSteam | ||
ArchiSteamFarm.OfficialPlugins.ItemsMatcher | ||
ArchiSteamFarm.OfficialPlugins.MobileAuthenticator | ||
ArchiSteamFarm.OfficialPlugins.Monitoring | ||
ArchiSteamFarm.OfficialPlugins.SteamTokenDumper | ||
ArchiSteamFarm.Tests | ||
ASF-ui@6900304400 | ||
resources | ||
tools/zip_exec | ||
wiki@9b2705b78d | ||
.dockerignore | ||
.editorconfig | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
ArchiSteamFarm.sln | ||
ArchiSteamFarm.sln.DotSettings | ||
cc.sh | ||
Directory.Build.props | ||
Directory.Packages.props | ||
Dockerfile | ||
Dockerfile.Service | ||
LICENSE.txt | ||
README.md | ||
run.sh |
Description
ASF is a C# application with primary purpose of farming Steam cards from multiple accounts simultaneously. Unlike Idle Master which works only for one account at given time, while requiring Steam client running in the background and launching additional processes imitating "game playing" status, ASF doesn't require any Steam client running in the background, doesn't launch any additional processes and is made to handle unlimited Steam accounts at once. In addition to that, it's meant to be run on servers or other desktop-less machines, and features full cross-OS support, which makes it possible to launch on any operating system with .NET Core runtime, such as Windows, Linux and macOS. ASF is possible thanks to gigantic amount of work done in marvelous SteamKit2 library.
Today, ASF is one of the most versatile Steam power tools, allowing you to make use of many features that were implemented over time. Apart from farming Steam cards, which remains the primary focus, ASF includes bunch of features on its own, such as a possibility to use it as Steam authenticator or chat logger. In addition to that, ASF includes plugin system, thanks to which anybody can further extend it to their needs.
Core features
- Automatic farming of available games with card drops using any number of active accounts
- No requirement of running or even having official Steam client installed
- Guarantee of being VAC-free, focus on security and privacy
- Complex error-reporting mechanism, reliability even during Steam issues and other networking quirks
- Flexible cards farming algorithm, pushing the performance to the maximum while still allowing a lot of customization
- Offline farming, enabling you to skip in-game status and stop confusing your friends with fake playing status
- Advanced support for Steam accounts, including ability to redeem keys, redeem gifts, accept trades, send messages and more
- Support for latest Steam security features, including SteamGuard, SteamParental and 2-factor authentication
- Unique ASF 2FA mechanism allowing ASF to act as a mobile authenticator, if needed
- STM-like integration for trades, both passive (accepting) and active (sending), ASF can help you complete your sets
- Special plugin system, which allows you to extend ASF in any way you wish through your own code
- Powered by .NET Core, cross-OS compatibility, official support for Windows, Linux and macOS
- ...and many more!
For learning about even more ASF features, we recommend starting with our FAQ entry.
Setting up / Help
Detailed guide regarding setting up and using ASF is available on our wiki in setting up section. It's user-friendly guide that shows basic, as well as a bit more complex ASF setup, covering all the required dependencies and other steps that are required in order to start using ASF software.
Compatibility / Supported operating systems
ASF officially supports Windows, Linux and macOS operating systems, but it can work anywhere where you can obtain working .NET Core runtime. Please visit compatibility section on the wiki for more information regarding environments that ASF can work in.
Want to know more?
Our wiki includes a lot of other articles that will tell you about everything in regards to ASF, as well as show you other features that you can make use of. If you have some time to spare and you'd like to find out what else ASF can do for you, we heavily encourage you to take a look!